为什么“echo $ {ARRAY [0]}”在运行脚本目录与源代码之间的行为有所不同呢?

时间:2016-09-08 00:02:53

标签: bash

我有一个bash脚本(array_test.sh),如下所示:

ARRAY=()
v="FOO"
ARRAY+=(${v})
v="BAR"
ARRAY+=(${v})

echo ${ARRAY[@]}
echo ${#ARRAY[@]}
echo ${ARRAY[0]}

当我直接运行该脚本(./array_test.sh)时,我得到如下结果:

FOO BAR
2
FOO

但是当我采购它(来源./array_test.sh)时,最后一个FOO丢失了:

FOO BAR
2

这是我的小脚本中的错误还是错误?

1 个答案:

答案 0 :(得分:2)

在ZSh中,也许还有其他一些shell,数组的索引是从1而不是从0开始。

所以问题很可能是你的命令行shell不是Bash。当您在自己的进程中将脚本作为可执行文件运行时,它在Bash中运行(或者像Bash一样运行的shell);当你在命令行shell中source时,它在ZSh(或者像ZSh那样运行的shell)中运行。

(上面提到Barmar的评论,现在已删除了,这让我想到了这一点。)