来自 bash 和 source 命令的不同结果

Different result from bash and source commands

我有一个非常简单的脚本名称 tt.sh 像这样:

listFile=("A" "B" "C" "D")
echo ${listFile[1]} ${listFile[2]}

我试图用 source 和 bash 测试这个脚本,但得到了不同的结果:

./tt.sh 
B C
source tt.sh
A B

为什么 source 命令从 1 而不是 0 开始数组? 我正在使用 MacOS

我没有 Mac,但这是我可以在 Arch Linux (2021) 上重现的内容:

$ cat >tt.sh 
listFile=("A" "B" "C" "D")
echo ${listFile[1]} ${listFile[2]}
^D

$ bash tt.sh 
B C

$ zsh tt.sh 
A B

当我 运行 带有 bash 的脚本时,它显示 B C。当我用 zsh 运行 时,它显示 A B.

您真的在采购的终端上使用 bash 吗?您可以仔细检查:

$ echo [=11=]
bash

如果上面显示bash,说明你是。如果它显示 zsh,则表示您正在使用 zsh,因此您在获取源代码时看到 zsh 行为。

Starting with macOS Catalina, the default is zsh。如果您真的喜欢 bash 行为,您可以尝试在 Mac 设置上切换默认 shell。

当您获取它时,使用当前 shell,当您执行 shebang 中提到的可执行文件时,使用。

bash 索引从 0 开始,其他一些 shell 的数组索引从 1 开始。

很可能您当前的 shell 不是 bash。