Sie verlieren es nicht in der Aufgabe, sondern im Echo. Sie können dies deutlich sehen, wenn Sie:
echo "${out}"
Sie sehen einen ähnlichen Effekt mit dem folgenden Skript:
x="Hello,
I
am
a
string
with
newlines"
echo "====="
echo ${x}
echo "====="
echo "${x}"
echo "====="
welche Ausgänge:
=====
Hello, I am a string with newlines
=====
Hello,
I
am
a
string
with
newlines
=====
Und, für Ihre Frage irrelevant, aber ich möchte es trotzdem erwähnen, bevorzuge ich das Konstrukt $ () anstelle von Backticks, nur um den zusätzlichen Vorteil zu haben, dass Befehle verschachtelt werden können. So wird Ihre Skriptzeile:
out=$(grep apache README)
Das sieht vielleicht nicht anders aus (und ist es auch nicht), aber es ermöglicht komplexere Befehle wie:
lines_with_nine=$(grep $(expr 7 + 2) inputfile)