while read
でループ実行したいときに、パイプで値を渡すことができる。
このときに、while文の中で変数をアップデートしても、変更が反映されない
これは、パイプはサブプロセスで実行されるため親プロセスの変数に影響を与えられないため。 https://unix.stackexchange.com/questions/143958/in-bash-read-after-a-pipe-is-not-setting-values
bash
runcmd2
in a subshell, so changing variable won’t be visible to parent shell.
なのでpipeではなく <
で値を渡す
shellのプロセス置換Process Substitution
while read line; do
done < <(echo -e "foo\nbar\nbaz")
これを使うと次のように書いて反映されるようにできる