arrays - 在 Debian 8.4 中创建数组变量时出错

标签 arrays linux bash shell sh

我有一个非常基本的 shell 脚本,包含

#!/bin/sh
NAME[0]="Hello"
echo ${NAME[0]}

所以当我运行这个脚本时,出现了一个错误

./test.sh: 2: ./test.sh: NAME[0]=Hello: not found
./test.sh: 3: ./test.sh: Bad substitution

基本上我浏览了一些教程,发现这是声明数组的基本方法。所以我很困惑为什么这是一个错误。有什么想法吗?

最佳答案

您正在以 #!/bin/sh 启动您的脚本,它有一个到 dash 的软链接(soft link)(当前版本的 sh 符合 POSIX 1003.2 和 1003.2a shell 规范)和 dash 不支持数组。从 debian 8 开始,dash 已成为默认 shell,因此如果您运行 ls -la/bin/sh,输出将是 /bin/sh -> dash

但是 bash 仍然是默认的登录 shell,只是更改了 shell 脚本中使用的默认/bin/sh。所以如果你在终端上运行你的代码,它会工作得很好。有关为什么在 Ubuntu 中进行此切换的更多信息,请参见 here .

如果你想在你的脚本中使用数组,那么你必须以 #!/bin/bash 开始你的脚本

所以如果像这样修改你的脚本就可以完美运行

#!/bin/bash
NAME[0]="Hello"
echo ${NAME[0]}

关于 Dash as Sh 的更多信息 DashAsBinSh

关于arrays - 在 Debian 8.4 中创建数组变量时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36795197/

相关文章:

linux - CloudFormation如何导出变量

bash - 在 Bash 循环中递增变量

python - 绘制两个不同长度的数组

c - valgrind 发现无效写入和读取的数量令人难以置信

regex - 继续 bash 脚本

linux - 如何将输出存储到日志而不是回显

linux - 从所有文件中提取 2 个值的 Shell 脚本?

bash - 如何在 Bash 中转义颜色代码?

c - 为什么在 C 中访问数组有限制?

c++ - 我面对这个 : invalid types `double[int]' for array subscript in my program