次の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では許可されていません。