bashでサブシェルを作成していますか? [コピー]

bashでサブシェルを作成していますか? [コピー]

誰かがこのスクリプトが私が期待する結果を生成しない理由を説明できますか?

 #!/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

パイプはそうです。たとえば、$BASHPIDwhileループの内側と外側から印刷したり、次のように直接確認したりできます。

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

おすすめ記事