为什么 ${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!
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!