我正在查看一个脚本(过去成功使用过),其中包含以下内容:
node=1
while :
do
userKey=WEB_${node}_USER
userVal=`echo ${!userKey}`
我无法弄清楚为什么会将感叹号添加到这样的变量引用中。是什么目的"!"在这种情况下服务?
我很少编写脚本,所以如果我遗漏任何细节请告诉我,我会尽量提供更多信息。我无法在其他地方找到这个答案。
提前致谢!
答案 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中,我认为在双引号内保留元字符状态的唯一字符是美元符号($),反向符号(`)和反斜杠(\)。