Bash 为什么;echo${ARRAY[0]}";运行脚本目录和源目录的行为不同?
我有一个bash脚本(array_test.sh),如下所示:Bash 为什么;echo${ARRAY[0]}";运行脚本目录和源目录的行为不同?,bash,Bash,我有一个bash脚本(array_test.sh),如下所示: ARRAY=() v="FOO" ARRAY+=(${v}) v="BAR" ARRAY+=(${v}) echo ${ARRAY[@]} echo ${#ARRAY[@]} echo ${ARRAY[0]} FOO BAR 2 FOO 当我直接运行该脚本(./array_test.sh)时,得到的结果如下: ARRAY=() v="FOO" ARRAY+=(${v}) v="BAR" ARRAY+=(${v}) echo
ARRAY=()
v="FOO"
ARRAY+=(${v})
v="BAR"
ARRAY+=(${v})
echo ${ARRAY[@]}
echo ${#ARRAY[@]}
echo ${ARRAY[0]}
FOO BAR
2
FOO
当我直接运行该脚本(./array_test.sh)时,得到的结果如下:
ARRAY=()
v="FOO"
ARRAY+=(${v})
v="BAR"
ARRAY+=(${v})
echo ${ARRAY[@]}
echo ${#ARRAY[@]}
echo ${ARRAY[0]}
FOO BAR
2
FOO
但是,当我将其源代码(source./array_test.sh)时,最后一个FOO
丢失:
FOO BAR
2
在我的小脚本中,这是一个bug还是什么错误?在ZSh中,或者在其他一些shell中,数组是从1而不是从0索引的 因此,问题很可能是您的命令行shell不是Bash。当您在自己的进程中以可执行文件的形式运行脚本时,它是在Bash(或行为与Bash相同的shell)中运行的;当您在命令行shell中
source
-ing它时,它运行在ZSh(或一个行为与ZSh相同的shell)中
(上面的评论,现在被删除了,这让我想到了这一点。)如果你把
#放进去,它会改变吗/bin/bash
作为脚本的第一行?与您的问题没有直接关系,但仅供参考,您误解了bash中引号的含义:当它们完全不起作用时,您将它们包括在内,而当它们可能有用时,则将其省略。如果你在谷歌上搜索Bash引号,你会发现很多信息。我无法重现这种行为。用bash 3.2.57和4.2.37两个版本都试过。@ruakh可能,或者awk
。我已经删除了我的评论。