バインドされていない変数を重複なく処理する方法は?

バインドされていない変数を重複なく処理する方法は?

コマンド終了状態を処理するには、次の一般的なパターンを考慮してください。

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

ステートメント内で割り当ての戻りコードをキャプチャする方法はありますかifif [[ $# -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

おすすめ記事