パラメータが設定されている場合、nullを割り当てるか、Bash変数の割り当てをキャンセルするにはどうすればよいですか?

パラメータが設定されている場合、nullを割り当てるか、Bash変数の割り当てをキャンセルするにはどうすればよいですか?

TLSを使用しない場合は変数を設定しないか空にする必要がUSE_TLSありますが、TLSを強制する必要がある場合は変数を設定する必要があります。デフォルトでは(つまり、設定)適用する必要がありますが、設定する他の変数を指定した場合は適用されません。null1do_not_use_tls1

# this assigns null or empty
USE_TLS=${do_not_use_tls:-""}

# this assigns empty or null
USE_TLS=${do_not_use_tls:+""}

USE_TLS設定するかどうかにかかわらずこれを設定しますが、それ以外の場合は値を割り当てないオーバーライドはありますか?次を試していますが、動作しません。do_not_use_tlsnull

USE_TLS=${do_not_use_tls:+${do_not_use_tls:-""}}

USE_TLS=${do_not_use_tls:-${do_not_use_tls:+null}}

ベストアンサー1

あなたが探しているものは次のとおりです。

unset -v USE_TLS
[ "${do_not_use_tls-}" = 1 ] || USE_TLS=1

まずUSE_TLS、変数の設定を解除してから(以前の値がないと確信している場合は必ずしも必要ではありません)、isを1除いて設定します。$do_not_use_tls1

または、より具体的に言えば、

if [ "${do_not_use_tls-}" = 1 ]; then
    unset -v USE_TLS
else
    USE_TLS=1
fi

"${do_not_use_tls-}"代わりに"$do_not_use_tls"akaが適用されている場合は、エラーを生成しないために使用してください。set -uset -o nounset

USE_TLS表示した例(値が変数の一部の拡張である割り当て形式である)を実際に使用することはできません。なぜかどうかを確認するにはdo_not_use_tlsテスト値が必要です。$do_not_use_tls1

おすすめ記事