>我正在尝试学习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 开始索引数组(。将舍邦更改为
#!/bin/bash
(或任何正确的路径(以确保脚本在作为可执行文件运行时由bash
执行。或者,使用 bash myscript
而不是例如 ./myscript
显式运行带有bash
的myscript
。