Bash-打印变量中的键和值

时间:2018-11-10 14:31:14

标签: arrays bash shell

给出:

array(a1)=123
array(b1)=456

我的命令是:

for test in ${array[@]}; do
   echo "Hello "$!test "$test" Hi"
done

输出为:

Hello test 123 Hi
Hello test 456 Hi

预期输出为:

Hello a1 123 Hi
Hello b1 456 Hi

1 个答案:

答案 0 :(得分:2)

test是普通变量,不存储对数组的任何引用。在您的情况下,写$!test与写${someUndefinedVariable}test相同(请参阅✱)。未定义的变量将扩展为空字符串。 test是文字字符串。

要打印键和值,您必须遍历键并手动检索相应的值:

declare -A array
array[a1]=123
array[b1]=456
for key in "${!array[@]}"; do
    echo "key=$key, value=${array[$key]}"
done

顺便说一句,我很惊讶您的命令甚至没有错误地运行;结束"丢失。您不能嵌套引号。在第一个"之后,第二个"将结束引号:

|quoted|       |quoted   |started quote without end -->
|      |       |     |   |
"Hello "$!test "$test" Hi"
       |       |     |   | 
       |unquoted     |unquoted

$!实际上是一个特殊变量,它包含最后一个后台命令的进程号。由于您未在会话中启动任何后台命令,因此$!为空。