我正在尝试替换包含多个带引号的单词的字符串变量作为命令的参数。
因此,给出以下示例脚本(请注意 shebang 中的 -x,这会导致输出被记录到 stderr),
#!/bin/bash -x
myArg="\"hello\" \"world\""
echo "string is:" $myArg
exit
这给了我们,
+ myArg='"hello" "world"'
+ echo 'string is:' '"hello"' '"world"'
string is: "hello" "world"
+ exit
第二行显示实际传递给命令的内容; bash 为字符串中的每个单词添加了单引号。如果我因此引用“$myArg”,则会发生同样的情况,但对于整个字符串而不是每个单词。
现在,想象一下,而不是echo
,我们将字符串传递给一个程序,其中一些参数需要引用模式,例如"*"
(不能由 shell 扩展)。
澄清一下,我根本不想在扩展过程中添加单引号。我怎样才能实现这个目标?
不要使用引号,使用数组(请参阅Bash常见问题解答 #050 http://mywiki.wooledge.org/BashFAQ/050):
$ myArgs=("hello" "world" "multiword arg with * ?")
+ myArgs=("hello" "world" "multiword arg with * ?")
$ echo "${myArgs[@]}"
+ echo hello world 'multiword arg with * ?'
hello world multiword arg with * ?
如果它确实需要采用字符串中带引号的字符串的形式,那么您要么必须使用类似的东西eval "echo $myArg"
(如果你不小心,这可能会导致一些非常讨厌的错误)或自己解析它(这将很困难)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)