私のプロジェクトには次のスニペットがあります:
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で解決策を提案します!