2015-10-20 123 views
1

这个替换有什么问题。变量内的变量

$ m_d_ver=0.2 
$ m=mod 
$ d=dom 
$ echo ${$m_$d_ver} 
-bash: ${$m_$d_ver}: bad substitution 

感谢,

+0

“这个语法有什么问题?” - 错,它不是语言的实际语法?你有没有找到任何文件或参考文件让你认为最初的提案会被允许? –

回答

3

什么你想要做的是一个间接的变量查找。其语法是${!namevar},其中namevar是一个包含您实际想要评估的名称的变量。因此:

mod_dom_ver=0.2 
m=mod 
d=dom 
var=${m}_${d}_ver 
echo "${!var}" 

请参阅BashFAQ #006

+0

谢谢,这是什么!标志 ? – user2230605

+0

这是告诉shell进行间接查找。 –

+0

顺便说一句,这里需要花括号,因为'_'是一个shell变量名中的有效字符,所以如果你写了'var = $ m_ $ d_ver',shell会试图展开'$ {m_}'并且'$ {d_ver}'。 –