私のプロジェクトには次のスニペットがあります:
local output="$(bash "${1##*/}")"
echo "$?"
local
のため、これは常にゼロを出力しますが、local
を削除すると$?
変数が正しく動作する:これは、サブシェルからの終了コードを想定することです。
私の質問は、終了値をキャプチャしながら、この変数をローカルに保つにはどうすればよいですか?
#!/bin/bash
thing() {
local foo=$(asjkdh) ret="$?"
echo "$ret"
}
これにより、「コマンドが見つかりません」の正しいエラーコードである127
がエコーされます。
local
を使用して、複数の変数を定義できます。したがって、ローカル変数RET
を作成して、local
が成功する前にサブシェルの終了コードをキャプチャし、$?
をゼロに設定します。
割り当てる前にローカル変数を宣言します。
thing() {
local output
output="$(bash "${1##*/}")"
echo "$?"
}
私の意見では、これは追加のRET
変数を設定するよりも読みやすくなっています。 YMMVはその上ですが、期待どおりに機能します。