给出:
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
答案 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
✱$!
实际上是一个特殊变量,它包含最后一个后台命令的进程号。由于您未在会话中启动任何后台命令,因此$!
为空。