2011-06-18 120 views
40

我想了解一個測試腳本,其中包括以下部分:

SCRIPT_PATH=${0%/*} 
if [ "$0" != "$SCRIPT_PATH" ] && [ "$SCRIPT_PATH" != "" ]; then 
    cd $SCRIPT_PATH 
fi 

什麼是${0%/*}代表什麼?謝謝

回答

60

它被稱爲Parameter Expansion。看看this page和其他網站。

做什麼${0%/*}是,它膨脹內參數0包含(這是所謂的腳本中的路徑)從它的結束除去串/*後綴後的值。

所以,$0是一樣的${0}這是像任何其他參數,例如。你可以寫作${1}。正如我所說的$0是特殊的,因爲它不是真實的參數,它總是在那裏,並代表腳本的名稱。參數擴展適用於{} - 大括號,而%是一種參數擴展。

%/*與最後一次出現/相匹配,並在該字符後移除任何東西(*意味着任何內容)。看看這個簡單的例子:

$ var="foo/bar/baz" 
$ echo "$var" 
foo/bar/baz 
$ echo "${var}" 
foo/bar/baz 
$ echo "${var%/*}" 
foo/bar 
+2

因此,它是AA了'目錄名($ 0)' – jm666

+5

在這個劇本,是的,它的工作原理是'目錄名稱「$ 0」',但它可能會導致問題。如果你這樣調用腳本:'bash script',那麼'$ {0/*}'不會給你路徑,它會返回腳本名,或者你指定了完整路徑(_/path/to/script_)什麼都不返回,所以不能保證在所有情況下按預期工作。 – c00kiemon5ter

+0

我正忙着在超級用戶上輸入一個有關此行的問題,我在我的問題中寫道,我通常會在Google中輸入部分代碼以獲得結果,但看起來我忘記了這一點,但只要我分手了問題,並在發佈之前對其進行分析,我搜索了'$ {0%}'並登陸了這裏,你已經明確表示了:) – SidOfc