Linux 使用点运行shell脚本为什么;echo$0“;打印bash

Linux 使用点运行shell脚本为什么;echo$0“;打印bash,linux,bash,shell,Linux,Bash,Shell,使用点运行shell脚本为什么“echo$0”打印-bash 假设我有下面的一段代码 #!/usr/bin/env bash echo $0 我使用点(.) 输出: -bash 但是, 如果我没有圆点就跑 输出是路径名与脚本名的组合,正如我所期望的那样。在现有解释器中运行脚本,而不是在新解释器中运行脚本,这意味着$0没有正常初始化。使用运行脚本时,本质上,就像您直接在shell命令行上键入脚本的内容一样。因此,echo“$0”将准确地输出您刚刚输入的内容 像$0这样的特殊变量只有在启动一个新

使用点运行shell脚本为什么“echo$0”打印-bash

假设我有下面的一段代码

#!/usr/bin/env bash
echo $0
我使用点(.)

输出:

-bash
但是,

如果我没有圆点就跑


输出是路径名与脚本名的组合,正如我所期望的那样。

在现有解释器中运行脚本,而不是在新解释器中运行脚本,这意味着
$0
没有正常初始化。

使用
运行脚本时,本质上,就像您直接在shell命令行上键入脚本的内容一样。因此,
echo“$0”
将准确地输出您刚刚输入的内容

$0
这样的特殊变量只有在启动一个新shell时才会初始化,而
不能初始化,否则它就没有多大用处

但是,如果您使用的是bash版本3或更高版本,则始终可以找到当前正在执行的文件,因此:

echo "$BASH_SOURCE"
无论如何调用该文件,它都有效。


源代码的别名:

不要将此命令用于运行脚本,它是为导入源文件而创建的。

您可以在这里看到:

ABS只是一个普通的资源。如果要影响当前环境,应使用
源代码运行脚本。可以将其视为从正在查找的文件中复制/粘贴代码。在这种情况下,
#/shebang
只是一个注释,没有任何东西可以修改
$0
echo "$BASH_SOURCE"