如果设置了参数,如何为 Bash 变量分配 null 或取消分配?

如果设置了参数,如何为 Bash 变量分配 null 或取消分配?

当不使用 TLS 时,变量USE_TLS应为 unset、或为空,但当必须强制执行 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变量(如果您确信它不会有以前的值,则这不是严格需要的),然后将其设置为1except $do_not_use_tlsis 1

或者更明确地说,

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

我使用"${do_not_use_tls-}"而不只是为了在aka生效的"$do_not_use_tls"情况下不生成错误。set -uset -o nounset

您不能真正使用您所展示的示例(全部采用赋值的形式,USE_TLS其值是do_not_use_tls变量的某种扩展),因为您需要测试 的值$do_not_use_tls以查看它是否是1

相关内容