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

Using a variable to refer to another variable in Bash

1
2
3
4
5
6
7
x=1
c1=string1
c2=string2
c3=string3

echo $c1
string1

我希望通过使用类似的东西使输出string1
echo $(c($x))

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

谁能指出我正确的方向?


请参阅Bash FAQ:如何使用变量变量(间接变量,指针,引用)或关联数组?

引用他们的例子:

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

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

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

当然,如果您想以正确的方式进行,只需使用数组

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

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


试试这个:

1
eval echo \$c$x

像其他人说的那样,在这种情况下使用数组更有意义。


如果你有bash 4.0,你可以使用关联数组..或者你可以只使用数组。 你可以使用的另一个工具是awk

例如

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