我有一个非常基本的 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/