我正在寻找一种快速的 POSIX shell 习惯用法,它可以执行“使用替代值”参数扩展的逆操作。${VARIABLE:+word}
也就是说,当 VARIABLE 为 null 或未设置时,我想要word,但是当 VARIABLE 不为 null 时,我想要 null 。
例如,如果我有一个 shell 变量 FLAG_VERBOSE,当该变量为非空时,我可以轻松地使通常安静的命令变得更加详细:
some_quiet_cmd ${FLAG_VERBOSE:+ --verbose} arg arg arg ... # verbose only if $FLAG_VERBOSE is set
Run Code Online (Sandbox Code Playgroud)
但是,当我有一个通常喋喋不休的命令时,当未通过提供参数设置 FLAG_VERBOSE 时,我想抑制其通常的喋喋不休:
if [ "$FLAG_VERBOSE" ]; then
CHATTINESS=
else
CHATTINESS=--quiet
fi
some_chatty_cmd $CHATTINESS arg arg arg ... # --quiet unless $FLAG_VERBOSE is set
Run Code Online (Sandbox Code Playgroud)
有没有一种方法可以用一个紧凑的表达式来做到这一点?我觉得好像缺少一个假设的参数扩展运算符${VARIABLE:!word}或类似的运算符。(也许我们会称之为“使用互补价值”?)
这是我能想到的最方便的形式:
some_chatty_cmd $( [ "$FLAG_VERBOSE" ] || echo --quiet ) arg... # default --quiet
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)