无法打印存储在另一个变量中的shell变量的值

时间:2014-06-06 16:40:10

标签: bash

我试图找到与特定模式匹配的所有变量并打印它们的值。

test_a="apple"
test_b="banana"
test_c="carrot"
test_d="doughnut"

test_show_all () {
    local i
    for i in ${!test_*}; do
        printf "..$i\n"
    #   printf "..$i-->${$i}\n"
    done    
}

循环找到正确的变量。 但是如果我取消注释for循环的第二行,bash对语法${$i}不满意。我认为这应该有效,因为$i包含变量的名称,所以我认为${$i}应该扩展为该存储名称的值。

2 个答案:

答案 0 :(得分:5)

间接变量引用为${!var}。将您的代码更改为

printf "..$i-->${!i}\n"

它应该有用。

答案 1 :(得分:1)

现在没用,但在bash 4.3中,您还可以使用namerefs。

for name in ${!test_*}; do
  declare -n value=$name
  printf "..$name->$value\n"
done

作为捷径,如果您只想迭代值(不考虑变量的实际名称),可以使用

declare -n value
for value in ${!test_*}; do
  printf "..$value\n"
done