使用dot运行shell脚本为什么“echo $ 0”print -bash
假设我有一段代码
#!/usr/bin/env bash
echo $0
我使用点(。)
执行. ./script.sh
输出:
-bash
然而,
如果我没有点
运行输出是路径名与我期望的脚本名称相结合。
答案 0 :(得分:2)
获取脚本在现有解释器中运行它而不是exec
一个新脚本,这意味着$0
未正常初始化。
答案 1 :(得分:0)
当您使用.
运行脚本时,它基本上就像您直接在shell命令行上键入脚本的内容一样。因此,如果您输入它,echo "$0"
将完全输出输出的内容。
$0
之类的特殊变量仅在您启动新的shell时初始化,.
不执行此操作,否则它将不会非常有用。
但是,如果您使用的是bash版本3或更高版本,则可以随时找出当前正在执行的文件:
echo "$BASH_SOURCE"
无论文件是如何被调用的,它都能正常工作。
答案 2 :(得分:0)
.
是source
的别名:
不要使用此命令运行脚本,它是为导入源文件创建的 你可以在这里看到:Advanced Bash scripting guide