2013-12-19 197 views
0

我有一个bash脚本中不起作用的以下功能?BASH:定义变量内的变量?

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

现在,如果我在CMD变量之前正确的回声$ 3它回声出1234执行该时我传递的3参数。但是当我做echo $ cmd时它只显示$ 3。

我试了几件事情像这样低于思考其得到条纹出 “$ 3”,但随后显示空白 “‘$ 3’”同上

回答

2

变量不展开里面的时候单引号。您需要使用双引号,但是由于您在内部使用了双引号,因此您需要确保您还记得要将其转义。

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

我试过以上,仍然出于某种原因$ 3不会显示。如果我回复3美元我看到它很好。我是def。在这件事上挠挠我的脑袋。 – user3100345

+0

我拿回来,我回声$ 3这是我的输入从命令行及其空白? – user3100345

+0

是的,我不知道为什么我的论点后失去了功能,但如果我定义一个新的变量arg3 = $ 3和echo $ arg3 cmd =它现在工作正常。太奇怪了。 – user3100345

0

Bash中的单引号可防止变量替换。为了替换第三个参数,您应该将您的字符串用双引号引起来。当然,你有双引号是你的字符串的一部分的问题,所以他们需要用反斜杠转义:中bash

cmd="<command version=\"33\" cmd=\"GETINFO\" $3 </command>" 
1

较新版本中添加一个-v标志的printf命令,使分配像这样稍微容易一点,因为报价减少了。

printf -v cmd '<command version="33" cmd="GETINFO" %d </command' "$3"