我在bash中有两个变量来完成另一个变量的名称,我想扩展它但不知道怎么做 我有:
echo $sala
a
echo $i
10
我希望以${a10}
格式展开${$sala$i}
,但{}
显示$
符号。
答案 0 :(得分:3)
有几种方法,各有利弊。最安全的方法是将完整的参数名称保存在单个参数中,然后使用间接扩展它:
tmp="$sala$i" # sets $tmp to 'a10'
echo "${!tmp}" # prints the parameter named by $tmp, namely $a10
一种稍微简单的方法是这样的命令:
eval echo \${$sala$i}
将使用参数eval
和echo
运行${a10}
,因此运行echo ${a10}
。这种方式通常不太安全 - 它的行为在参数值上有点混乱 - 但它不需要临时变量。
答案 1 :(得分:1)
使用eval
。
eval "echo \${$sala$i}"
将值放在另一个变量中。
result=$(eval "echo \${$sala$i}")
答案 2 :(得分:1)
通常的答案是eval
:
sala=a
i=10
a10=37
eval echo "\$$sala$i"
这回应37.如果您愿意,可以使用"\${$sala$i}"
。
小心eval
,特别是如果您需要在参数列表中保留空格。它非常强大,而且非常混乱。它可以与旧贝壳以及Bash一起使用,这可能是也可能不是你眼中的优点。
答案 3 :(得分:1)
你可以通过间接方式来做到这一点:
$ a10=blah
$ sala=a
$ i=10
$ ref="${sala}${i}"
$ echo $ref
a10
$ echo ${!ref}
blah
但是,如果您有这样的索引......数组可能更合适:
$ declare -a a
$ i=10
$ a[$i]="test"
$ echo ${a[$i]}
test