2013-03-21 26 views
11

在CentOS我的脚本做工精细。但是Debian的挤压,当我运行的脚本,我得到:

cpfailover.sh: 30: Bad substitution 

脚本行说:

SCRIPT_PATH="${BASH_SOURCE[0]}"; 

我已经看到了很多例子,即使在这里,这是一个正确的路线没有。哪里有问题。

+0

可以用 “$ 0”,而不是'$ {BASH_SOURCE [0]}'? AFAIK他们应该是一样的。 – khachik 2013-03-21 07:45:55

+1

@khachik:在Bash 3.0中引入'$ {BASH_SOURCE [@]}'用于调试目的。它不等同于$ 0。根据Bash手册,'$ {BASH_SOURCE [@]}'中的元素是对应于$ {FUNCNAME [@]}'中的元素的*源文件名*。 – pynexj 2013-03-21 08:33:11

回答

16

是否使用/bin/sh?在Debian挤压,/bin/sh是一个符号链接/bin/dash不支持${array[0]}

+0

是的,我使用/ bin/sh – abkrim 2013-03-21 09:50:46

+0

Gracias。更新系统使用旧的bash而不是破折号并且正常工作。 – abkrim 2013-03-21 16:01:50

+4

因为你的脚本依赖于bash特定的功能,所以我建议你明确使用/ bin/bash。 – pynexj 2013-03-22 01:44:22

3

更改您的代码

SCRIPT_PATH=$0; 

,而不是

SCRIPT_PATH="${BASH_SOURCE[0]}"; 
+0

你能否详细说明为什么你觉得'$ 0'比'$ {BASH_SOURCE [0]}更好“? – 2016-06-09 04:54:40

+1

它的POSIX/bin/sh兼容,其中$ {BASH_SOURCE [0]}只能在bash中工作。一般来说,如果你的目标不是多个体系结构或旧操作系统,你应该将你的shebang切换到#!/ bin/bash,这样你就可以使用所有bash的特性。请记住,Mac OSX带有bash 3.2,所以如果你的目标是它,你不能使用bash-4的功能。 – 2016-10-03 20:50:53