源代码Bash脚本中的$ 0不返回脚本名称

时间:2011-05-02 01:59:21

标签: macos bash

当我在运行Bash(Snow Leopard)的Mac上的Mac OS X v10.6.7脚本中引用$ 0时,我得到的是-bash,而不是脚本的名称。

我运行了this Stack Overflow question中描述的脚本:

#!/bin/bash

echo
echo '# arguments called with ($@) -->  '"$@"
echo '# $1 -------------------------->  '"$1"
echo '# $2 -------------------------->  '"$2"
echo '# path to me ($0) ------------->  '"$0"
echo '# parent path (${0%/*}) ------->  '"${0%/*}"
echo '# my name (${0##*/}) ---------->  '"${0##*/}"
echo

以下内容:

> . show_parms.sh foo

# arguments called with ($@) -->  foo
# $1 -------------------------->  foo
# $2 -------------------------->
# path to me ($0) ------------->  -bash
# parent path (${0%/*}) ------->  -bash
# my name (${0##*/}) ---------->  -bash

有什么想法吗?

3 个答案:

答案 0 :(得分:8)

这是有道理的,因为你正在寻找脚本

. show_parms.sh foo

而不是执行它

./show_parms.sh foo

如此answer to the same question中所述,您可以使用$BASH_SOURCE来了解从中获取命令的文件的名称。

答案 1 :(得分:3)

$ 0返回进程的名称。通过使用。运算符,您只需将脚本读入现有 bash进程并评估其包含的命令;进程的名称仍然是“-bash”,这就是你所看到的。您必须将脚本实际作为自己的进程执行:

chmod +x show_parms.sh
./show_params.sh foo

然后你会得到你所期望的。这不是OS X特定的;这就是bash(或sh)的工作原理。

答案 2 :(得分:1)

这是因为你正在使用。运营商。如果您只是输入

show_parms.sh foo

你会得到你想要的结果。