0

使用 dot 运行 shell 脚本 为什么 "echo $0" 打印 -bash

假设我下面有一段代码

#!/usr/bin/env bash
echo $0

我使用点 (.) 执行

. ./script.sh

输出:

-bash

然而,

如果我没有点跑

输出是路径名与我预期的脚本名相结合。

4

3 回答 3

2

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

于 2012-07-20T03:24:50.097 回答
0


.是 的别名source

不要使用此命令运行脚本,它是为导入源文件而创建的。
你可以在这里看到:Advanced Bash scripting guide

于 2012-07-20T03:42:30.593 回答
0

当您使用 运行脚本时.,本质上就好像您直接在 shell 命令行上键入脚本的内容一样。因此echo "$0",如果您只是键入它,它将准确地输出它会输出的内容。

像这样的特殊变量$0只有在你启动一个新的 shell 时才会被初始化,这.不会,否则它不会很有用。

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

echo "$BASH_SOURCE"

无论如何调用文件,它都有效。

于 2012-07-20T03:34:05.540 回答