【问题标题】:bash: how to access a "dynamic declared variable" in a for loopbash:如何在 for 循环中访问“动态声明的变量”
【发布时间】:2019-02-09 05:56:06
【问题描述】:

我在使用“动态创建”变量(名称)进行操作时遇到问题

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

输出正常:

foobar_b01 foobar_b02

变量存在。内容没问题。如何在不使用显式名称 $status_b03 的情况下获取值?我喜欢使用 $status_$i (动态创建的变量名)之类的东西。

最好的 马克

【问题讨论】:

    标签: linux bash loops variables dynamic


    【解决方案1】:

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

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

    输出:

    b01
    foobar_b01
    b02
    foobar_b02
    b03
    foobar_b03
    

    【讨论】:

    • 完美- 非常感谢 另外一个(不是很重要的问题):如何在 for 循环之外(之后)使用 vname-Variables?我所做的是使用vname=status_$iecho "${!vname}" 重复for 循环,并从第一个for 循环中获得所需的输出。什么工作正常。但例如,我如何比较两个或多个 vname 变量(无需显式写入 $status_b01)?我喜欢做类似if [ "$status_b01" = ok ] || [ "$status_b02" = ok ]; then ....... 之类的事情,我可以在第一个“不好”之后使用 while 循环中断,但是 ....
    • 循环内外的工作方式相同。您在另一个变量中有一个变量的名称,然后取消引用该变量以获取另一个变量的值:foo=bar; baz=foo; echo ${!baz} 打印 bar
    • 好的 - 但我的意思是我如何在 for 循环之后从 for 循环访问变量。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-16
    • 2011-05-28
    • 1970-01-01
    相关资源
    最近更新 更多