Linux bash:如何访问for循环中的“动态声明变量”

Linux bash:如何访问for循环中的“动态声明变量”,linux,bash,loops,variables,dynamic,Linux,Bash,Loops,Variables,Dynamic,我无法使用动态创建的变量名称进行操作 BZ="b01 b02 b03" [user:~]$ for i in $BZ; do echo $i ; declare status_$i=foobar_"$i" ; echo wrong: $status_$i;done 输出: b01 wrong: b01 b02 wrong: b02 b03 wrong: b03 [user:~]$ echo $status_b01 $status_b02 b01 foobar_b01 b02 foo

我无法使用动态创建的变量名称进行操作

BZ="b01 b02 b03"
[user:~]$ for i in $BZ; do echo $i ; declare status_$i=foobar_"$i" ; echo wrong:  $status_$i;done
输出:

b01
wrong: b01
b02
wrong: b02
b03
wrong: b03

[user:~]$ echo $status_b01    $status_b02
b01
foobar_b01
b02
foobar_b02
b03
foobar_b03
输出正常:

foobar_b01 foobar_b02
变量存在。内容还可以。如何在不使用明确名称$status_b03的情况下获取值?我喜欢使用$status_u$I之类的东西作为变量的动态创建名称

最好的
Marc

必须使用具有要取消引用的变量名称的变量:

BZ="b01 b02 b03"
for i in $BZ
do
    echo "$i"
    declare status_$i=foobar_"$i"
    vname=status_$i
    echo "${!vname}"
done
输出:

b01
wrong: b01
b02
wrong: b02
b03
wrong: b03

[user:~]$ echo $status_b01    $status_b02
b01
foobar_b01
b02
foobar_b02
b03
foobar_b03

完美-非常感谢您,还有一个不太重要的问题:在for循环之后,如何在外部使用vname变量?我要做的是仅使用vname=status_$I和echo${!vname}重复for循环,以获得与第一个for循环分开的所需输出。什么好用。但例如,我如何在不显式写入$status_b01的情况下比较两个或多个vname变量?我喜欢做一些事情,比如如果[$status\u b01=ok]|[$status\u b02=ok];然后我可以使用while循环,在第一个not ok之后使用break out,但是…循环内外的工作方式相同。在另一个变量中有一个变量的名称,然后取消引用该变量以获取另一个变量的值:foo=bar;baz=foo;echo${!baz}打印bar.ok-但我的意思是如何在for循环之后从for循环访问变量。