複数行のスクリプト変数があります。この変数をトラバースして行ごとに読み取り、各行を希望どおりに処理するにはどうすればよいですか?
質問する
46560 次
2 に答える
34
次の複数行の変数を検討してください
x=$(echo -e "a\nb\nc d e")
各行の簡単なプロセス: echo
prefix=LINE:
を使用し、行を一重引用符で囲むだけです。次のコードのいずれかがその要件を満たします。
while read line; do echo "LINE: '${line}'"; done <<< "$x"
また
while read line; do echo "LINE: '${line}'"; done < <(echo "$x")
どちらもサブシェルを作成せず (たとえば、ループ内で変数を設定し、ループ外でそれらにアクセスすることができます)、両方とも出力します。
LINE: 'a'
LINE: 'b'
LINE: 'c d e'
しかし、代わりにあなたが持っているとしましょう
x=$(echo -e "a \n b\nc d e")
# note--------^--^
そして、その先頭と末尾の空白はアプリケーションにとって重要です (例: Git 磁器の解析)。上記のコードは両方とも、後者の変数/データに対して前者とまったく同じ出力を提供しますが、これはあなたが望むものではありません。先頭と末尾の空白を保持するにはwhile read line
、while IFS= read -r line
. つまり、次のコードのいずれか
while IFS= read -r line; do echo "LINE: '${line}'"; done <<< "$x"
また
while IFS= read -r line; do echo "LINE: '${line}'"; done < <(echo "$x")
生産します
LINE: 'a '
LINE: ' b'
LINE: 'c d e'
詳細については、 Greg Wooledge の優れた Bash FAQを参照してください。
于 2012-08-10T13:02:26.460 に答える