私は以下を理解します:
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
true
echo $?
同時に実行されるまで実行されません。