关于macos:源代码Bash脚本中的$ 0不返回脚本名称

$0 in sourced Bash script not returning script name

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

我运行了这个堆栈溢出问题中描述的脚本:

1
2
3
4
5
6
7
8
9
10
#!/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

生成以下内容:

1
2
3
4
5
6
7
8
> . show_parms.sh foo

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

有什么想法吗?


这是有道理的因为你是采购的脚本

1
. show_parms.sh foo

而不是执行它

1
./show_parms.sh foo

作为explained在这两个问题的答案一样,你可以使用$BASH_SOURCE知道这个名字的文件从sourced commands是存在的。


0美元归来的名称的过程。《城市使用。运营商,你只是阅读《进入你现有的bash脚本的过程和评估信息的commands contains the name of the;工艺一直"猛击",那么那就是你看到的。你有两个事实上的execute脚本作为其自身的流程:

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

然后你会得到你期望的。这不是OS X的特异性;这就是我(sh或bash)的作品。


这是因为你是用的。放映。如果你只是型

1
show_parms.sh foo

你会得到你想要的结果。