为什么 ${1[@]} 无效,即使 ${stringVar[@]} 以其他方式工作?

Why is ${1[@]} invalid, even though ${stringVar[@]} works otherwise?

function HelloWorld()
{
var1=
echo ${var1[@]}

echo 
echo ${1[@]}

}

HelloWorld "Hello World"

echo ${var1[@]} 将 运行 没有问题,但 echo ${1[@]} 给我 'bad substitution.' 如果 var1 相同,我不理解这两个命令之间的区别作为 ?

${array[@]} 是只对数组有意义的语法;一个常规字符串可以像一个长度为 1 的数组一样,但是对于位置参数没有实现该语法,因为没有理由这样做:因为位置参数不能是数组,所以不可能有效,有用的含义 "${1[@]}" 可能与 """".

的含义不同

对语法扩展的节俭使当前无效的语法可用于未来的扩展以赋予意义;如果 bash 为所有可能的语法定义了含义,那么在不破坏向后兼容性的情况下将无法实现新的扩展。因此,好的语言设计[1] 可以避免定义没有有效用途的语法。

[1] - 很少按此顺序使用的三个词表示 bash!