2013-03-21 28 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