コマンド終了状態を処理するには、次の一般的なパターンを考慮してください。
if COMMAND; then
echo success
else
echo failure
fi
同じ変数割り当て(与えられたset -o nounset
)を使用しても機能しません。
$ if foo="$no_such_variable"; then echo success; else echo failure; fi
bash: no_such_variable: unbound variable
ㅏ変数置換の確認また、動作しません。
$ if foo="${no_such_variable:?}"; then echo success; else echo failure; fi
bash: no_such_variable: parameter null or not set
ステートメント内で割り当ての戻りコードをキャプチャする方法はありますかif
?if [[ $# -eq N ]]
各割り当て自体で問題をキャッチするのではなく、そのステートメントをスクリプトの残りの部分にあるすべてのパラメータ割り当てと組み合わせるので、標準的な回避策を避けたいと思います。
これはPythonモードと似ていますif (foo := bar()):
。
ベストアンサー1
変数を設定しない組み込みテストを中心に何かを構築することもできますtest -v no_such_variable
。たとえば、関数はsetvar
このテストを実行し、通常の場合にのみ割り当てることができます。
set -o nounset
setvar(){
declare -n var=$1 # -n is like ${!var} but for lvalue too
declare value=$2
[ -v ${value} ] && var="${!value}"
}
if setvar foo no_such_variable
then echo success
else echo failure
fi