在CentOS我的脚本做工精细。但是Debian的挤压,当我运行的脚本,我得到:
cpfailover.sh: 30: Bad substitution
脚本行说:
SCRIPT_PATH="${BASH_SOURCE[0]}";
我已经看到了很多例子,即使在这里,这是一个正确的路线没有。哪里有问题。
在CentOS我的脚本做工精细。但是Debian的挤压,当我运行的脚本,我得到:
cpfailover.sh: 30: Bad substitution
脚本行说:
SCRIPT_PATH="${BASH_SOURCE[0]}";
我已经看到了很多例子,即使在这里,这是一个正确的路线没有。哪里有问题。
更改您的代码
SCRIPT_PATH=$0;
,而不是
SCRIPT_PATH="${BASH_SOURCE[0]}";
你能否详细说明为什么你觉得'$ 0'比'$ {BASH_SOURCE [0]}更好“? – 2016-06-09 04:54:40
它的POSIX/bin/sh兼容,其中$ {BASH_SOURCE [0]}只能在bash中工作。一般来说,如果你的目标不是多个体系结构或旧操作系统,你应该将你的shebang切换到#!/ bin/bash,这样你就可以使用所有bash的特性。请记住,Mac OSX带有bash 3.2,所以如果你的目标是它,你不能使用bash-4的功能。 – 2016-10-03 20:50:53
可以用 “$ 0”,而不是'$ {BASH_SOURCE [0]}'? AFAIK他们应该是一样的。 – khachik 2013-03-21 07:45:55
@khachik:在Bash 3.0中引入'$ {BASH_SOURCE [@]}'用于调试目的。它不等同于$ 0。根据Bash手册,'$ {BASH_SOURCE [@]}'中的元素是对应于$ {FUNCNAME [@]}'中的元素的*源文件名*。 – pynexj 2013-03-21 08:33:11