首先 应注意$0变量在脚本中的作用,$0的正确名称叫做Positional Parameters,这里放上地址。
Specila-Parameters
($0) Expands to the name of the shell or shell script. This is set at shell initialization. If Bash is invoked with a file of commands (see Shell Scripts),
$0
is set to the name of that file. If Bash is started with the-c
option (see Invoking Bash), then$0
is set to the first argument after the string to be executed, if one is present. Otherwise, it is set to the filename used to invoke Bash, as given by argument zero.
所以当shell初始化时,$0扩展成shell 或者 shell script的名称,如果是使用文件加参数的方式执行的脚本,$0 就是这个脚本的名称。
我们有一个path.sh文件,在目录/root/myWorkplace
中内容如下
echo '$0 is :'$0
pwd
cd `dirname $0` || exit 1
pwd
在/root目录使用命令sh myWorkplace/path.sh
执行结果如下
$0 is :myWorkplace/path.sh
/root
/root/myWorkplace
可以看到如果脚本不在当前目录,那$0变量还会加上从当前目录到脚本所在目录所跨越的文件夹,而使用了命令cd `dirname $0` || exit 1
,可以让我们的脚本的工作目录转换为脚本所在目录,否则脚本的工作目录是执行脚本的目录。