首页 > 解决方案 > Bash - 从变量中打印键和值

问题描述

鉴于:

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

标签: arraysbashshell

解决方案


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

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


推荐阅读