これはコマンドの標準出力を1行ずつ f という変数に読み込んで何らかの処理を行うってやつです。 whileの中でやることがファイル操作などの一般的なことならこれで全然問題ないんですが、実行中のシェル環境に対する処理(具体的には変数の設定など)を行おうとすると期待通りにいってくれなくなります。例えばこんな感じ↓ # findで見つけたファイル名をfilesという配列変数に詰め込みたい files=() find -type f | while read -r f; do files+=("$f") done echo "${files[@]}" # 確かにfilesに値を入れた筈なのに空が出力される?? これはパイプで繋げると後ろのwhileがサブシェルで実行されてしまうために起こる現象です。噛み砕いて説明すると… 現在findを実行中のbashとは別に、パイプの後ろでもう一つのbashが起
![パイプ出力を現在のシェル上のwhileに喰わせる上手いやり方 - Qiita](https://cdn-ak-scissors.b.st-hatena.com/image/square/7a5c2f6bfa2e418cf78f6c8d33abe830bd6de571/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-9f5428127621718a910c8b63951390ad.png%3Fixlib%3Drb-4.0.0%26w%3D1200%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTkxNiZoPTMzNiZ0eHQ9JUUzJTgzJTkxJUUzJTgyJUE0JUUzJTgzJTk3JUU1JTg3JUJBJUU1JThBJTlCJUUzJTgyJTkyJUU3JThGJUJFJUU1JTlDJUE4JUUzJTgxJUFFJUUzJTgyJUI3JUUzJTgyJUE3JUUzJTgzJUFCJUU0JUI4JThBJUUzJTgxJUFFd2hpbGUlRTMlODElQUIlRTUlOTYlQjAlRTMlODIlOEYlRTMlODElOUIlRTMlODIlOEIlRTQlQjglOEElRTYlODklOEIlRTMlODElODQlRTMlODIlODQlRTMlODIlOEElRTYlOTYlQjkmdHh0LWNvbG9yPSUyMzIxMjEyMSZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT01NiZ0eHQtY2xpcD1lbGxpcHNpcyZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZzPWVmNjQwYTdmNDgwMDUzNjYzNjE4ZDMzNWIyNDA1YzAy%26mark-x%3D142%26mark-y%3D112%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTYxNiZ0eHQ9JTQwa2F3YXomdHh0LWNvbG9yPSUyMzIxMjEyMSZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT0zNiZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZzPTgyNWFkYjAxODcxMjExODczMDRjNTI2OTI3MWI5ZDRm%26blend-x%3D142%26blend-y%3D491%26blend-mode%3Dnormal%26s%3D1f3b335aac1bfd8b8b65499026b33667)