bash中命令的选项及参数使用变量传递
环境
1 | test() { |
复现
-o
选项期望接受到空值。
test
函数被执行后,命令的-o
选项接受的参数不是空值,而是两个单引号''
。
如果修改为两个双引号""
1 | local opt="-o """ |
命令的-o
选项接受的参数是两个双引号""
,也不是空值。
给单双引号加反斜杠转义也没有用,依然没有成功接受到空值。
解决
在bash中字符串拼接容易引发各种问题,需要熟悉bash解析脚本时对单词的分割和引号的处理才能避免,这时候应该使用数组来保存传递参数而不是字符串。
1 | local opt=( |
添加选项以及参数通过增加数组元素来添加
1 | opt+=(-dn 1) |
传递给命令时使用@
来展开数组,同时使用双引号将数组变量括起来
1 | "${cmd}" "${opt[@]}" |