function HelloWorld()
{
var1=$1
echo ${var1[@]}
echo $1
echo ${1[@]}
}
HelloWorld "Hello World"
echo ${var1[@]}
将正常运行,但 echo ${1[@]}
给我“错误的替换”。如果 var1
与 $1
相同,我不明白这两个命令之间的区别?
最佳答案
${array[@]}
是仅对数组有意义的语法;常规字符串可以像长度为 1 的数组一样工作,但是位置参数没有实现该语法,因为没有理由这样做:因为位置参数不能是数组,所以不可能有有效、有用的含义 “${1[@]}”
可能与 “$1”
或 “${1}”
的含义不同。
对语法扩展的节约使当前无效的语法可供将来的扩展赋予意义;如果 bash 为所有可能的语法定义了含义,那么在不破坏向后兼容性的情况下就无法实现新的扩展。因此,避免定义没有有效用途的语法是良好的语言设计[1]。
[1] - 三个很少按顺序使用的单词来指代 bash!
关于bash - 为什么 ${1[@]} 无效,尽管 ${stringVar[@]} 可以正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70342486/