2016-09-08 34 views
1

我有一个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 

那是一个错误或错误的东西在我的小脚本?

+0

如果你把'#!/ bin中/ bash'作为第一行是否改变剧本? – Barmar

+0

与你的问题没有直接关系,但仅供参考,你误解了Bash中的引号:当他们完全没有做任何事情时,你会包括它们,当它们有潜在用途时将它们排除在外。如果你使用Google Bash引号,你会发现很多信息。 – ruakh

+0

我无法重现该行为。试用bash 3.2.57和4.2.37。 – Barmar

回答

2

在zsh的,也许还有一些其他的壳,阵列1,而不是从0

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

(帽尖到Barmar的上述评论,现在删除了,这让我在这样的思路。)

相关问题