BASH:定义变量中的变量?

时间:2013-12-19 18:14:59

标签: linux bash function

我在bash脚本中有以下功能不起作用?

do_get() {
        cmd='<command version="33" cmd="GETINFO" $3</command>'
        echo $cmd
}

现在,如果我在cmd变量之前回显$ 3,它会回显1234,我在执行此操作时将其作为3参数传递。但是当我做回声$ cmd时它只显示3美元。

我尝试了下面这样的一些事情,认为它已经被镶边了 '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>"