誰かがこのスクリプトが私が期待する結果を生成しない理由を説明できますか?
#!/bin/bash
#
var=0
ls -1 /tmp| while read file
do
echo $file
var=1
done
echo "var is $var"
ファイルのリストを取得してからvar is 0
varが1でない理由は何ですか? whileループがサブシェルを生成するためですか?
ベストアンサー1
パイプはそうです。たとえば、$BASHPID
whileループの内側と外側から印刷したり、次のように直接確認したりできます。
ls | while read file; do
sleep 100;
done
、停止し、C-Z
後でターミナル セッションでプロセス ツリーを確認または表示ps
します。ps --forest
わずかに異なる「パイプライン」でサブシェルを防ぐことができます。
var=0
while read file
do
echo $file; var=1
done < <(ls -1 /tmp/)
echo $var #=> 1