我想执行一个命令,该命令带有一个取决于变量属性的选项。如果设置了变量,则使用值加载该选项,但如果没有,则不加载该选项。这就是我所拥有的:
if [ -n "$variable" ]
then command ... -option $variable
else command ...
fi
我的想法是将其与其中的条件合并为一个命令,这样我就不必重复该命令的其他选项两次。
非常感谢您的宝贵时间。
答案1
使用 bash 数组:
opts=()
[ "$variable" ] && opts+=(-option "$variable")
command ... "${opts[@]}"
因为这使用了 bash 数组,所以即使$variable
包含空格或其他困难字符,它也能起作用。
怎么运行的
opts=()
这将创建一个名为 的空数组
opts
。[ "$variable" ] && opts+=(-option "$variable")
如果
$variable
不为空,则我们将-option
和附加$variable
到数组opts
。command ... "${opts[@]}"
这将执行您的命令。如果
opts
非空,则将其元素添加到命令中。如果opts
为空,则不添加任何内容:就像"${opts[@]}"
根本没有一样。
答案2
然后接受你的命令并使其成为如下函数:
function command_function () {
command ... -option $variable
}
if [ -n "$variable" ]
then command_function ... -option $variable
else command_function ...
fi
您要知道,Bash 函数中的括号不会传递任何内容。
答案3
使用猛击代换 (Shell 参数扩展)以获得简洁且易读的语法:
$ echo ${variable:+-option $variable}
$ variable=yes
$ echo ${variable:+-option $variable}
-option yes
答案4
以下一行代码即可:
[ x"$VARIABLE" = x ] && echo UNSET || echo SET
这将测试变量x"$变量"等于X换句话说,如果$变量为空;如果测试满足,则第一个选项(回显 UNSET)被执行,如果测试不是满足最后一个选项被执行(回显设置)。如果您不想在第二种情况下执行任何操作,您可以执行
[ x"$VARIABLE" = x ] && echo UNSET || :
这比其他解决方案简单得多,只允许对条件进行一次评估,并且对于 VARIABLE 中出现的奇怪字符具有很强的鲁棒性。