-e
複数のコマンドが s でつながれたオプションを使用して bash スクリプトを実行すると、意味をなさない動作が見られ、&&
そのうちの 1 つが失敗します。失敗したコマンドでスクリプトが停止し、終了ステータスを返すことを期待しますが、代わりに残りのスクリプトを問題なく実行します。
ここに私にとって意味のある例があります:
$ false && true; echo $?
1
$ bash -xe -c "false && true"; echo $?
+ false
1
$ bash -xe -c "false; true"; echo $?
+ false
1
そして、これが私には意味をなさないものです:
$ bash -xe -c "false && true; true"; echo $?
+ false
+ true
0
これは、何が起こっているのか理解できないところです。false && true
ステータス 1 を返すので、スクリプトが実行を停止してステータス 1 を返すべきではありませんfalse; true
。
実験中に、一連のコマンドを括弧で囲むと、期待どおりに機能することがわかりました。
$ bash -xe -c "(false && true); true"; echo $?
+ false
1
誰でもこれについて説明できますか?