text.txt
このようなファイルがあります。
line1
line2
line3
各行を繰り返してエコーするスクリプトを作成したいと思います。
modified line1
modified line2
modified line3
以下は非常に一般的なソリューションのスクリプトです。
while IFS= read -r line; do
echo modified $line
done <<< $(cat ~/text.txt)
しかし、私が得た結果は次のとおりです。
modified line1 line2 line3
何が間違っていますか?
答え1
問題は最後の行にあります。変数(コマンドの置き換え)が不要であるか、ファイルをすでに読み取ることができるcat
ためです。read
これにより:
while IFS= read -r line; do
echo modified $line
done < ~/text.txt
効果がある
また、次のように変数を引用すると、コマンドが機能します。
"$(cat ~/text.txt)"
bashは、引用しない限り、変数の改行文字を無視するためです。しかし、これは状況を過度に複雑にする。