我在bash脚本中有以下函数,但不起作用?
do_get() {
cmd='<command version="33" cmd="GETINFO" $3</command>'
echo $cmd
}
现在,如果我在cmd变量之前回显$3,它将回显1234,我在执行此操作时将其作为3参数传递。但当我做一个echo $cmd时,它只显示3美元。
我在下面尝试了几个类似的东西,以为它被删除了'$3‘,但是它显示空白’‘$3’‘,和上面的一样
发布于 2013-12-19 18:20:22
当变量包含在单引号中时,它不会展开。您需要使用双引号,但由于内部有双引号,因此需要确保也要转义这些双引号。
do_get() {
cmd="<command version=\"33\" cmd=\"GETINFO\" $3</command>"
echo $cmd
}
发布于 2013-12-19 18:30:57
较新版本的bash
向printf
命令添加了一个-v
标志,这使得这样的赋值看起来更容易一些,因为引用减少了。
printf -v cmd '<command version="33" cmd="GETINFO" %d </command' "$3"
发布于 2013-12-19 18:28:37
Bash中的单引号可以防止变量替换。为了替换第三个参数,应该用双引号将字符串括起来。当然,字符串中存在双引号的问题,因此需要使用反斜杠对其进行转义:
cmd="<command version=\"33\" cmd=\"GETINFO\" $3 </command>"
https://stackoverflow.com/questions/20688810
复制相似问题