the*_*eta 1 scripting bash shell-script
我正在以下列方式调用具有多个标志的 bash 脚本:
/home/username/myscript -a -b 76
Run Code Online (Sandbox Code Playgroud)
因此,为了说明,-a 标志在 myscript 中执行某些操作,而 -b 标志在 myscript 中将某些参数设置为 76。
如何根据某些先前定义的变量使这些标志成为条件?例如,如果某个变量 var=ON,我只想使用 -a 标志,否则我不知道使用该标志的内容。我正在寻找类似的东西:
var=ON
/home/username/myscript
if [ "$var" == "ON" ]; then
-a
fi
-b 76
Run Code Online (Sandbox Code Playgroud)
然而,这个方案在实施时不起作用。什么可以用来实现预期的结果?
您可以在数组中构建命令:
#!/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
Run Code Online (Sandbox Code Playgroud)
然后运行它:
"${cmd[@]}"
Run Code Online (Sandbox Code Playgroud)
注意最后一部分周围的引号,以及上面分配周围的括号。语法很难看,但它可以在包含空格等参数的情况下工作。(使用引号添加带空格的参数,例如cmd+=("foo bar"))
相关的,使用不那么丑陋的方法和方式,它们可能会失败:
在简单的情况下,就像这里的一个可选参数一样,您可以使用替代值扩展:
var=x
myscript ${var:+"-a"} -b 76
Run Code Online (Sandbox Code Playgroud)
在这里,${var:+foo}插入fooifvar不为空(所以var=ON, var=FALSE,var=x都会插入它),如果它为空或未设置(var=, 或unset var)则不插入。小心通常的引用问题。
| 归档时间: |
|
| 查看次数: |
19376 次 |
| 最近记录: |