x=1
c1=string1
c2=string2
c3=string3
echo $c1
string1
我想通过使用以下内容使输出为string1
:
echo $(c($x))
稍后在脚本中我可以增加x
的值,并输出string1
,然后string2
和string3
。
有人能指出我正确的方向吗?
答案 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
与其他人一样,在这种情况下使用数组更有意义。