サブシェルの終了コードはロギングに影響します。

サブシェルの終了コードはロギングに影響します。

このbashスクリプトがあります。

echo "x" & X=$!
echo "y" & Y=$!
( echo "z" ; exit 0; ) & Z=$!  # this line

wait ${X} && echo "X $?" 
wait ${Y} && echo "Y $?" 
wait ${Z} && echo "Z $?" 

終了0を終了1に変更すると、スクリプトの最後のエコー文は実行されません。たとえば、終了コードが0の場合の出力は次のようになります。

x
X 0
z
y
Y 0
Z 0

しかし、1に変更すると、次のようになります。

x
y
X 0
z
Y 0

私は括弧内の内容をサブシェルで実行する必要があるとします。私のコードがなぜこのようなことをするのか知っている人はいますか?

答え1

次の文書で説明されていますhelp wait

IDの状態を返します。

したがって、プロセスが終了すると、1waitは2番目のコマンドを実行せずに返し、1短絡&&します。最初のコマンドが成功したかどうかにかかわらず、値を印刷するには;代わりに試してください。&&

関連情報