我试图找到与特定模式匹配的所有变量并打印它们的值。
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}
应该扩展为该存储名称的值。
答案 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