我正在通过以下方式调用具有多个标志的 bash 脚本:
/home/username/myscript -a -b 76
为了说明这一点,-a 标志在 myscript 中执行某些操作,而 -b 标志在 myscript 中将某些参数设置为 76。
如何根据先前定义的变量使这些标志成为有条件的?例如,我只想在某个变量 var=ON 时使用 -a 标志,否则我不知道如何使用该标志。我正在寻找类似的东西:
var=ON
/home/username/myscript
if [ "$var" == "ON" ]; then
-a
fi
-b 76
然而,这个计划实施后并没有发挥作用。可以用什么来达到预期的结果?
答案1
您可以在数组中构建命令:
#!/bin/bash
var=ON
cmd=( /home/username/myscript ) # create array with one element
if [ "$var" == "ON" ]; then
cmd+=( -a ) # append to the array
fi
cmd+=( -b 76 ) # append two elements
然后运行它:
"${cmd[@]}"
请注意最后一部分的引号以及上面作业周围的括号。语法很丑陋,但它在面对包含空格等的参数时有效。 (使用引号添加带有空格的参数,例如cmd+=("foo bar")
)
相关的,不太丑陋的方法以及它们可能失败的方式:
在简单的情况下,就像这里的一个可选参数一样,您可以使用替代值扩展:
var=x
myscript ${var:+"-a"} -b 76
在这里,如果不为空则${var:+foo}
插入(因此, ,都会插入它),如果为空或未设置(, 或)则不插入任何内容。请注意通常的引用问题。foo
var
var=ON
var=FALSE
var=x
var=
unset var
答案2
如果我理解正确的话:
var=ON
if [ "$var" = "ON" ]; then
/home/username/myscript -a -b 76
else
/home/username/myscript -b 76
fi