有一个简单的脚本:
echo "file: $0"
当像这样调用时:
脚本文件
或者
./myscript.sh
按预期给出了脚本的文件名(file: myscript.sh
),但是调用时:
源 myscript.sh
或者
。 ./myscript.sh
给出 shell 名称 ( bash
) 而不是脚本文件名。
为什么会这样?
答案1
第一次调用将启动一个新的 bash 实例来解释该脚本,这意味着 bash 将设置$0
为其路径。
第二次调用将把该文件视为可执行文件并运行它,因此$0
将指向它。
后两个调用将把文件加载到 bash 的当前实例中,因此$0
将指向那里。
注意:#2 需要文件可执行,而#1、#3 和 #4 则不需要。