40
我想了解一個測試腳本,其中包括以下部分:
SCRIPT_PATH=${0%/*}
if [ "$0" != "$SCRIPT_PATH" ] && [ "$SCRIPT_PATH" != "" ]; then
cd $SCRIPT_PATH
fi
什麼是${0%/*}
代表什麼?謝謝
我想了解一個測試腳本,其中包括以下部分:
SCRIPT_PATH=${0%/*}
if [ "$0" != "$SCRIPT_PATH" ] && [ "$SCRIPT_PATH" != "" ]; then
cd $SCRIPT_PATH
fi
什麼是${0%/*}
代表什麼?謝謝
它被稱爲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
因此,它是AA了'目錄名($ 0)' – jm666
在這個劇本,是的,它的工作原理是'目錄名稱「$ 0」',但它可能會導致問題。如果你這樣調用腳本:'bash script',那麼'$ {0/*}'不會給你路徑,它會返回腳本名,或者你指定了完整路徑(_/path/to/script_)什麼都不返回,所以不能保證在所有情況下按預期工作。 – c00kiemon5ter
我正忙着在超級用戶上輸入一個有關此行的問題,我在我的問題中寫道,我通常會在Google中輸入部分代碼以獲得結果,但看起來我忘記了這一點,但只要我分手了問題,並在發佈之前對其進行分析,我搜索了'$ {0%}'並登陸了這裏,你已經明確表示了:) – SidOfc