Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 为什么;echo${ARRAY[0]}";运行脚本目录和源目录的行为不同?_Bash - Fatal编程技术网

Bash 为什么;echo${ARRAY[0]}";运行脚本目录和源目录的行为不同?

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

我有一个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[@]}
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
。我已经删除了我的评论。