当我在运行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
有什么想法吗?
答案 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
你会得到你想要的结果。