使用变量来引用Bash中的另一个变量

时间:2010-04-14 02:53:40

标签: bash variables

x=1
c1=string1
c2=string2
c3=string3

echo $c1
string1

我想通过使用以下内容使输出为string1echo $(c($x))

稍后在脚本中我可以增加x的值,并输出string1,然后string2string3

有人能指出我正确的方向吗?

3 个答案:

答案 0 :(得分:28)

请参阅Bash常见问题解答:How can I use variable variables (indirect variables, pointers, references) or associative arrays?

引用他们的例子:

realvariable=contents
ref=realvariable
echo "${!ref}"   # prints the contents of the real variable

要说明这对您的示例有用:

get_c() { local tmp; tmp="c$x"; printf %s "${!tmp}"; }
x=1
c1=string1
c2=string2
c3=string3
echo "$(get_c)"

当然,如果您想以正确的方式进行,只需use an array

c=( "string1" "string2" "string3" )
x=1
echo "${c[$x]}"

请注意,这些数组是零索引的,因此x=1会打印string2;如果您需要string1,则需要x=0

答案 1 :(得分:2)

如果你有bash 4.0,你可以使用associative arrays.。或者您可以使用arrays。您可以使用的另一个工具是awk

例如

awk 'BEGIN{
  c[1]="string1"
  c[2]="string2"
  c[3]="string3"
  for(x=1;x<=3;x++){
    print c[x]
  }
}'

答案 2 :(得分:2)

试试这个:

eval echo \$c$x

与其他人一样,在这种情况下使用数组更有意义。