gpt4 book ai didi

shell - 反 "use alternative value"的方便 shell 习语

转载 作者:行者123 更新时间:2023-12-01 00:56:23 24 4
gpt4 key购买 nike

我正在寻找一个快速的 POSIX shell 成语,它与 ${VARIABLE:+word} "use alternative value" parameter expansion 相反.

也就是说,当 VARIABLE 为 null 或未设置时,我想要单词,但是当 VARIABLE 不为 null 时,我想要 null。

例如,如果我有一个 shell 变量 FLAG_VERBOSE,当该变量为非空时,我可以轻松地使通常安静的命令变得更加冗长:

some_quiet_cmd ${FLAG_VERBOSE:+ --verbose} arg arg arg ... # verbose only if $FLAG_VERBOSE is set

但是,当我有一个通常很健谈的命令时,我想在未设置 FLAG_VERBOSE 时通过提供参数来抑制其通常的健谈:
if [ "$FLAG_VERBOSE" ]; then
CHATTINESS=
else
CHATTINESS=--quiet
fi

some_chatty_cmd $CHATTINESS arg arg arg ... # --quiet unless $FLAG_VERBOSE is set

有没有办法在一个紧凑的表达式中做到这一点?我觉得好像我错过了一个假设的参数扩展运算符 ${VARIABLE:!word}或类似。 (也许我们称之为“使用互补值(value)”?)

最佳答案

函数的想法是要走的路:

~.$ blank_or () { [[ $# -lt 2 ]] && { echo blank_or "\$var" default 1>&2; return 1; }; [[ "$1" = "" ]] && echo $2; }
~.$ this=that; blank_or "$this" --quiet
~.$ this=; blank_or "$this" --quiet
--quiet
~.$ blank_or
blank_or $var default
~.$

并且,如果您打算经常使用它,请提供一个 helper 。所以你的例子变成:
some_chatty_cmd $(blank_or "$FLAG_VERBOSE" --quiet) arg arg arg ...

关于shell - 反 "use alternative value"的方便 shell 习语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27554677/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com