使用dot运行shell脚本为什么“echo $ 0”print -bash

时间:2012-07-20 03:22:33

标签: linux bash shell

使用dot运行shell脚本为什么“echo $ 0”print -bash

假设我有一段代码

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

我使用点(。)

执行
. ./script.sh

输出:

-bash

然而,

如果我没有点

运行

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

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

当您使用.运行脚本时,它基本上就像您直接在shell命令行上键入脚本的内容一样。因此,如果您输入它,echo "$0"将完全输出输出的内容。

$0之类的特殊变量仅在您启动新的shell时初始化,.不执行此操作,否则它将不会非常有用。

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

echo "$BASH_SOURCE"

无论文件是如何被调用的,它都能正常工作。

答案 2 :(得分:0)


.source的别名:

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