Bash脚本 - 变量引用中的感叹号

时间:2014-08-01 15:33:54

标签: bash shell unix

我正在查看一个脚本(过去成功使用过),其中包含以下内容:

node=1
while :
do
    userKey=WEB_${node}_USER
    userVal=`echo ${!userKey}`

我无法弄清楚为什么会将感叹号添加到这样的变量引用中。是什么目的"!"在这种情况下服务?

我很少编写脚本,所以如果我遗漏任何细节请告诉我,我会尽量提供更多信息。我无法在其他地方找到这个答案。

提前致谢!

2 个答案:

答案 0 :(得分:4)

它被称为间接参数扩展。如果$userKey扩展为变量userKey的值,则${!userKey}会扩展为 userKey的变量值。由于usrKey的值为WEB_1_USER(给定$node的当前值,${!userKey}会扩展为与$WEB_1_USER相同的结果。

它的使用有点罕见,因为在许多情况下(包括,在这里出现),用户名的数组WEB_USER将比一组编号变量更清晰。

WEB_USER=(alice bob charlie)

node=1
while :
do
  userVal=${WEB_USER[node]}

答案 1 :(得分:-1)

在bash中,我认为在双引号内保留元字符状态的唯一字符是美元符号($),反向符号(`)和反斜杠(\)。