Arrays 数组元素的行为异常
我正在努力学习Bash语法。正如我正在阅读的文档所证实的,我希望ARRAYNAME[0]访问元素1,ARRAYNAME[1]访问元素2。然而,我的剧本似乎发生了一些有趣的事情。尝试访问ARRAYNAME[0]似乎给了我一个空字符串,因为我在下面的注释中显示了输出。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
下面的脚本是我编辑的,以使输出按预期打印。我不认为我的问题来自于运行
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
。