終了状態同等性テスト

終了状態同等性テスト

次の2つのコマンドのリストは移植可能なものと同じですか?

$foo; echo $? #(1)

そして

$foo && echo 0 || echo $? #(2)

PS

次のように定義されたコマンドを考えてみましょうexit-status

#!/bin/sh
exit "$1"

POSIX規格は以下の動作を禁止していますか?

> exit-status 2 && echo "impossible branch"; echo $?
1

そうでない場合、POSIX 互換シェルは 2 つの親コマンドのリストを同一視できないことがあります。携帯性がないという言葉ではありません...

ベストアンサー1

両方のコマンドラインは移植可能です。そして両方の効果は同じです。

2番目について:$foo失敗するとecho 0評価されないため、echo $?最後のコマンドの終了ステータスが印刷されます。つまり$foo

論理演算子は左結合型です。つまり、2番目のコマンドラインは次のようになります。

$ { $foo && echo 0 } || echo $? 

(最初は$シェルプロンプトを表します。)

シェルコマンド言語標準化されたコマンドのリスト、オペレータの好みなど。

セクション2.9.3シェルコマンド言語また、&&演算子の終了状態の意味も指定します。

終了ステータス

ANDリストの終了状態は、リストで実行された最後のコマンドの終了状態でなければなりません。

ポストスクリプトに関しては、はい、POSIXでは許可されていません。

おすすめ記事