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