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

Arrays 在Debian 8.4中创建数组变量时出错,arrays,linux,bash,shell,sh,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,它有

我有一个非常基本的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
的软链接(当前版本的sh符合外壳的POSIX 1003.2和1003.2a规范)和
dash
不支持阵列。在debian 8以后的版本中,
dash
已成为默认shell,因此如果运行
ls-la/bin/sh
,输出将是
/bin/sh->dash

但是bash仍然是默认的登录shell,只有shell脚本中使用的默认/bin/sh被更改。所以,若你们在终端上运行你们的代码,它就会正常工作。更多关于为什么在Ubuntu中使用这个开关的信息可以找到

如果要在脚本中使用数组,则必须使用
#启动脚本/bin/bash

因此,如果像这样修改,您的脚本可以完美地工作

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

有关Dash as Sh的详细信息

您正在运行的
/bin/Sh
,如果该shell实际上是bash,则使用该名称将其置于POSIX兼容模式,其中没有阵列。使用
#的shebang/usr/bin/env bash
取而代之。@ghoti IMHO的答案已经包含了以下信息:)它成功了,谢谢!我还可以考虑BASH作为默认外壳,因为我没有安装它吗?当我安装操作系统时,它已经存在。@Patrick bash仍然是默认的登录shell,只有shell脚本中使用的默认/bin/sh已更改,可以找到更多信息