パイプ 'false' はゼロ以外の結果コードを提供しません。

パイプ 'false' はゼロ以外の結果コードを提供しません。

私は以下を理解します:

true;   echo "$?"      # 0
false;  echo "$?"      # 1
true  | echo "$?"      # 0

しかし、これではありません:

false | echo "$?"      # 0

...なぜ印刷されないのですか1

パイプラインが強制的に失敗した後に回復するにはどうすればよいですか1

ベストアンサー1

どちらの結果も誤解を招く可能性がtrue | echo "$?"ありますfalse | echo "$?"。内容が"$?"設定されます今後コマンドをfalseコマンドにパイプしますecho

この行を実行するために、bashはコマンドパイプラインを設定します。パイプラインが設定された後、コマンドは並列に開始されます。したがって、あなたの例では次のようになります。

true;   echo "$?"      # 0
false;  echo "$?"      # 1
true  | echo "$?"      # 0

同じです:

true   
echo "$?"      # 0
false  
echo "$?"      # 1
echo "$?"      # 0

trueecho $?同時に実行されるまで実行されません。

おすすめ記事