使用 dot 运行 shell 脚本 为什么 "echo $0" 打印 -bash
假设我下面有一段代码
#!/usr/bin/env bash
echo $0
我使用点 (.) 执行
. ./script.sh
输出:
-bash
然而,
如果我没有点跑
输出是路径名与我预期的脚本名相结合。
Sourcing 一个脚本在现有的解释器中运行它,而不是在exec
一个新的解释器中运行,这意味着它$0
没有正常初始化。
.
是 的别名source
:
不要使用此命令运行脚本,它是为导入源文件而创建的。
你可以在这里看到:Advanced Bash scripting guide
当您使用 运行脚本时.
,本质上就好像您直接在 shell 命令行上键入脚本的内容一样。因此echo "$0"
,如果您只是键入它,它将准确地输出它会输出的内容。
像这样的特殊变量$0
只有在你启动一个新的 shell 时才会被初始化,这.
不会,否则它不会很有用。
但是,如果您使用的是 bash 版本 3 或更高版本,您总是可以找出当前正在执行的文件,因此:
echo "$BASH_SOURCE"
无论如何调用文件,它都有效。