源、zsh、“.”之间的区别并直接 shell 脚本调用

Difference between source, zsh, "." and directly shell script calling

我有非常简单的脚本(for_loop4.sh),如下所示。

# !/bin/zsh
#

for (( i = 0; i < 3; i++ ))
do
    echo $i;
done

我正在为我的 shell 使用 zsh 5.0.7。

当 运行 此脚本使用源、zsh 和 .命令, 它按预期工作。但是,当直接调用这个脚本时, 它失败并显示消息 "Bad for loop variable"。

为什么会这样? 有什么区别?

$ source ./for_loop4.sh
0
1
2

$ zsh ./for_loop4.sh
0
1
2

$ . ./for_loop4.sh
0
1
2

$ ./for_loop4.sh
./for_loop4.sh: 4: ./for_loop4.sh: Syntax error: Bad for loop variable

你的第一行是错误的:

# !/bin/zsh

应该是:

#!/bin/zsh

确保你的 zsh 安装在哪里。可以安装到/usr/目录下。
你可以输入,

$ which zsh