【问题标题】:Bash - Print value of variable in arrayBash - 打印数组中变量的值
【发布时间】:2017-09-26 09:57:30
【问题描述】:

我想做这样的事情

A='123'
B='143'
C='999'

declare -a arr=(A B C)

for i in "{$arr[@]}"
do
     echo "@i" "$i" 
done

这应该给我

的输出
A 123
B 143
C 999

但是我收到的是变量名,而不是输出中的值(我只是在输出中看到“A @i”...

【问题讨论】:

    标签: arrays bash loops


    【解决方案1】:

    如果您想在循环中存储变量名称,而不是复制它们的值,那么您可以使用以下内容:

    for i in "${arr[@]}"; do
        echo "${!i}"
    done
    

    这意味着i 的值被当作变量名,所以你最终会在循环中回显$A$B$C

    当然,这意味着您可以同时打印变量名,例如通过使用:

    echo "$i: ${!i}"
    

    并不完全相同,但您可能也对使用关联数组感兴趣:

    declare -A assoc_arr=( [A]='123' [B]='143' [C]='999' )
    
    for key in "${!assoc_arr[@]}"; do
        echo "$key: ${assoc_arr[$key]}"
    done
    

    【讨论】:

    • 太好了,这正是我想要的。
    • @Michael 您可能也对使用关联数组感兴趣 - 请参阅我的编辑。
    【解决方案2】:

    建议加$:

    declare -a arr=("$A" "$B" "$C")
    

    【讨论】:

    • 是的,我知道这是示例的替代方法,但实际上我希望能够同时输出变量名和值。这可能吗?
    猜你喜欢
    • 2016-01-14
    • 1970-01-01
    • 1970-01-01
    • 2012-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多