扩展变量Bash Scripting

时间:2012-02-27 21:34:26

标签: bash variables scripting

我在bash中有两个变量来完成另一个变量的名称,我想扩展它但不知道怎么做 我有:

echo $sala
a
echo $i
10

我希望以${a10}格式展开${$sala$i},但{}显示$符号。

4 个答案:

答案 0 :(得分:3)

有几种方法,各有利弊。最安全的方法是将完整的参数名称保存在单个参数中,然后使用间接扩展它:

tmp="$sala$i"     # sets $tmp to 'a10'
echo "${!tmp}"    # prints the parameter named by $tmp, namely $a10

一种稍微简单的方法是这样的命令:

eval echo \${$sala$i}

将使用参数evalecho运行${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