bash - 为什么 ${1[@]} 无效,尽管 ${stringVar[@]} 可以正常工作?

标签 bash parameter-expansion

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/

相关文章:

linux - 来自键盘的变量等于bash

linux - 'size' vs 'ls -l' 获取可执行文件的大小

linux - 基于第三个数字键的反向排序

arrays - 如何在 BASH 中创建 n 个变量?

json - 如何从 jq 在 bash 中迭代 JSON 数组

bash - 如何替换任意数量的命令行参数中的每个分隔符,这些参数都是分隔的名称-值对?

bash - 如何用空格替换变量的逗号分隔字符串?

arrays - 数组上的 Shell 参数扩展