Arrays 数组元素的行为异常

Arrays 数组元素的行为异常,arrays,bash,Arrays,Bash,我正在努力学习Bash语法。正如我正在阅读的文档所证实的,我希望ARRAYNAME[0]访问元素1,ARRAYNAME[1]访问元素2。然而,我的剧本似乎发生了一些有趣的事情。尝试访问ARRAYNAME[0]似乎给了我一个空字符串,因为我在下面的注释中显示了输出。 下面的脚本是我编辑的,以使输出按预期打印。我不认为我的问题来自于运行zsh,因为我已经尝试使用/bin/sh运行这个脚本。我在这里看不到什么? 提前谢谢 Test.sh: #!/bin/zsh NAMES=(Homer Marge B

我正在努力学习Bash语法。正如我正在阅读的文档所证实的,我希望ARRAYNAME[0]访问元素1,ARRAYNAME[1]访问元素2。然而,我的剧本似乎发生了一些有趣的事情。尝试访问ARRAYNAME[0]似乎给了我一个空字符串,因为我在下面的注释中显示了输出。
下面的脚本是我编辑的,以使输出按预期打印。我不认为我的问题来自于运行
zsh
,因为我已经尝试使用
/bin/sh
运行这个脚本。我在这里看不到什么?
提前谢谢

Test.sh:

#!/bin/zsh
NAMES=(Homer Marge Bart Lisa Maggy)
OUTPUTSTRING="The Simpsons family consists of: "
FAMILY="This list is empty :("
echo "Names[0]: ${NAMES[0]}"           # prints "Names[0]: "
echo "Names[1]: ${NAMES[1]}"           # prints "Names[1]: Homer"
if [ ${#NAMES[@]} -gt 0 ] ; then
    FAMILY="${NAMES[1]}"
else                                   # does not go in to else
    echo "$OUTPUTSTRING""$FAMILY" 
    exit 0
fi
NAMECOUNTER=2
while [ $NAMECOUNTER -le ${#NAMES[@]} ]; do      #-lt if behaviour was as I expected
    FAMILY+=", ${NAMES[$NAMECOUNTER]}"
    NAMECOUNTER=$((NAMECOUNTER+1))
done

echo "The Simpsons family consists of: $FAMILY"   # The Simpsons family consists of: Homer, Marge, Bart, Lisa, Maggy

您正在使用
zsh
(从1开始索引数组)执行
bash
脚本(期望数组从0开始索引)。将shebang更改为

#!/bin/bash

(或任何正确的路径)以确保脚本在作为可执行文件运行时由
bash
执行。或者,使用
bash myscript
显式运行
myscript
bash
,而不是执行
bash
脚本(期望数组从0开始索引)和
zsh
(从1开始索引数组)。将shebang更改为

#!/bin/bash

(或任何正确的路径)以确保脚本在作为可执行文件运行时由
bash
执行。或者,使用
bash-myscript
显式运行
myscript
,而不是在另一个shell中运行
/myscript

为什么希望bash脚本的结果正确?虽然zsh和bash有一些相似之处,但它们并不完全相同。那么,对同一脚本使用/bin/bash时会发生什么情况呢?
bash
数组的索引为零<但是,code>zsh数组是单索引的,您正在使用
zsh
运行脚本
/bin/sh
通常不支持数组,尽管即使作为
/bin/sh
调用,
bash
似乎也支持数组。出于扩展和美观的原因,zsh是我的默认shell。当我已经穷尽了我的逻辑是否有问题时,我不介意测试zsh和bash之间的一致性。对同一脚本使用/bin/bash会得到相同的结果。@chepner啊!问题是我正在通过zsh运行/bin/bash吗?如果是,如何正确打开/bin/bash?另外,请提交一个答案,我会在可能的时候接受。或者将shebang更改为
#/bin/bash
,或者使用
bash
显式运行脚本:
bash-myscript
。在另一个shell中运行时,为什么希望bash脚本的结果正确?虽然zsh和bash有一些相似之处,但它们并不完全相同。那么,对同一脚本使用/bin/bash时会发生什么情况呢?
bash
数组的索引为零<但是,code>zsh数组是单索引的,您正在使用
zsh
运行脚本
/bin/sh
通常不支持数组,尽管即使作为
/bin/sh
调用,
bash
似乎也支持数组。出于扩展和美观的原因,zsh是我的默认shell。当我已经穷尽了我的逻辑是否有问题时,我不介意测试zsh和bash之间的一致性。对同一脚本使用/bin/bash会得到相同的结果。@chepner啊!问题是我正在通过zsh运行/bin/bash吗?如果是,如何正确打开/bin/bash?另外,请提交一个答案,我会在可能的时候接受。或者将shebang更改为
#/bin/bash
,或者使用
bash
显式运行脚本:
bash-myscript