【发布时间】:2018-01-01 16:47:49
【问题描述】:
我想在 bash 中调用具有从数组构建的参数的程序。
我希望 bash 调用:
echo -arg1=simple -arg2="some spaces"
来自array=(echo -arg1=simple "-arg2=\"some spaces\"") 或类似的(我可以调整项目的创建方式)。
问题
使用"${array[@]}" bash 调用:
echo -arg1=simple '-arg2="some spaces"'
但我不想要单引号。如何正确构建和扩展数组?
示例代码
#!/bin/bash
set -x
array=()
array+=(echo)
array+=(-arg1=simple)
array+=("-arg2=\"some spaces\"")
"${array[@]}"
"${array[*]}"
${array[@]}
${array[*]}
结果调用
echo -arg1=simple '-arg2="some spaces"'
'echo -arg1=simple -arg2="some spaces"'
echo -arg1=simple '-arg2="some' 'spaces"'
echo -arg1=simple '-arg2="some' 'spaces"'
【问题讨论】:
-
为什么要在数组中保留
echo? -
为了使示例更简单,我可以编写
echo "${array[@]}"并从数组中省略它。 -
单引号实际上并没有做任何事情;这就是
-x选项选择显示第二个参数的方式。"${array[@]}"是正确的。