このファイルがあるとしましょう:
hello
world
hello world
このプログラム
#!/bin/bash
for i in $(cat $1); do
echo "tester: $i"
done
出力
tester: hello
tester: world
tester: hello
tester: world
for
が欲しいのですが ただし、空白を無視して各行を個別に繰り返します。つまり、最後の2行は
tester: hello world
"$(cat $ 1)";で引用符foriを使用する 結果は
i
ファイル全体が一度に割り当てられます。何を変更すればよいですか?
承認された回答:
(9年後:)
提供された両方の回答は、最後に改行がないファイルでは失敗します。これにより、最後の行が事実上スキップされ、エラーが発生せず、災害につながります(難しい方法で学習しました:)。
私がこれまでに見つけた最も簡潔な解決策は、「Just Works」(bashとshの両方で):
while IFS='' read -r LINE || [ -n "${LINE}" ]; do
echo "processing line: ${LINE}"
done < /path/to/input/file.txt
より詳細な説明については、このStackOverflowの説明を参照してください:ファイルの最後に改行がない場合に「読み取り中」(Bash)を使用してファイルの最後の行を読み取る方法は?
注意:このアプローチでは、最後の行に改行がない場合は、最後の行に改行が追加されます。