私のプロジェクトには次のスニペットがあります:
local output="$(bash "${1##*/}")"
echo "$?"
これにより、常に0が出力されますlocalが、削除するlocalと、$?変数が正しく動作します。これは、サブシェルからの終了コードを想定しています。
私の質問は、終了値をキャプチャしながら、この変数をローカルに保つにはどうすればよいですか?
私のプロジェクトには次のスニペットがあります:
local output="$(bash "${1##*/}")"
echo "$?"
これにより、常に0が出力されますlocalが、削除するlocalと、$?変数が正しく動作します。これは、サブシェルからの終了コードを想定しています。
私の質問は、終了値をキャプチャしながら、この変数をローカルに保つにはどうすればよいですか?
回答:
#!/bin/bash
thing() {
local foo=$(asjkdh) ret="$?"
echo "$ret"
}
これは127、「コマンドが見つかりません」の正しいエラーコードをエコーします。
を使用localして、複数の変数を定義できます。したがってRET、local成功する前にサブシェルの終了コードをキャプチャし$?てゼロに設定するローカル変数も作成します。
bashこの式を左から右に評価することが保証されていますか?
bashリファレンスマニュアルからは、これに関する情報を見つけることができません。
shellcheckこの問題を検出するだけでなく、unix.stackexchange.com / a / 281749/24718で解決策を提案します!