我在bash脚本中有以下功能不起作用?
do_get() {
cmd='<command version="33" cmd="GETINFO" $3</command>'
echo $cmd
}
现在,如果我在cmd变量之前回显$ 3,它会回显1234,我在执行此操作时将其作为3参数传递。但是当我做回声$ cmd时它只显示3美元。
我尝试了下面这样的一些事情,认为它已经被镶边了 '3美元'但它显示空白 “3美元”与上述相同
答案 0 :(得分:2)
当在单引号内时,变量不会展开。你需要使用双引号,但由于你的内部有双引号,你需要确保你也记得逃避它们。
do_get() {
cmd="<command version=\"33\" cmd=\"GETINFO\" $3</command>"
echo $cmd
}
答案 1 :(得分:1)
较新版本的bash
为-v
命令添加printf
标记,使得这样的分配更加容易,因为引用减少了。
printf -v cmd '<command version="33" cmd="GETINFO" %d </command' "$3"
答案 2 :(得分:0)
Bash中的单引号可防止变量替换。为了替换第三个参数,您应该将字符串括在双引号中。当然,你有双引号的问题是你的字符串的一部分,所以他们需要用反斜杠进行转义:
cmd="<command version=\"33\" cmd=\"GETINFO\" $3 </command>"