私は次のようなものがあります:
FILES=()
for i in *.map
do
FILES+=($i)
done
find /var/candy -name "chocolate_[0-9]" | while read snack
do
FILES+=($snack)
done
for file in ../out/amsterdam/apples/{system.map,vmlinux}
do
FILES+=($file)
done
ただし、配列には../out/amsterdam/apples/system.map
合計のみが含まれます../out/amsterdam/apples/vmlinux
。他の値はどうなりますか?変数に何かが含まれていることを確認するためにエコーするので、これらのループに存在することを知っています。
ベストアンサー1
からインポートバッシュFAQ:
パイプライン内のループに変数を設定しました。ループが終わるとなぜ消えますか?
上記のように潜在的に驚くべき動作が発生する理由は、各SubShellが新しい変数コンテキストと環境を導入するためです。上記のwhileループは、親シェルから取得した初期値 "0"で生成されたlinecount変数の独自のコピーを持つ新しいサブシェルで実行されます。このコピーは計算に使用されます。 whileループが完了すると、サブシェルのコピーが削除され、親シェルの元の変数linecount(その値は変更されません)がechoコマンドに使用されます。
2番目のループでサブシェルが生成されるのを防ぐために、パイプ以外のものを介してデータを供給できます。
while read snack; do
FILES+=($snack)
done < <(find /var/candy -name "chocolate_[0-9]")
。
while read snack; do
FILES+=($snack)
done <<<"$(find /var/candy -name "chocolate_[0-9]")"