3
我正在通過apache啓動腳本閱讀,試圖解決與我的服務器的一些問題,但在開始時有一個參數擴展,我真的不明白。
SCRIPTNAME="${0##*/}"
SCRIPTNAME="${SCRIPTNAME##[KS][0-9][0-9]}"
if [ -n "$APACHE_CONFDIR" ] ; then
if [ "${APACHE_CONFDIR##/etc/apache2-}" != "${APACHE_CONFDIR}" ] ; then
DIR_SUFFIX="${APACHE_CONFDIR##/etc/apache2-}"
else
DIR_SUFFIX=
fi
elif [ "${SCRIPTNAME##apache2-}" != "$SCRIPTNAME" ] ; then
DIR_SUFFIX="-${SCRIPTNAME##apache2-}"
APACHE_CONFDIR=/etc/apache2$DIR_SUFFIX
else
DIR_SUFFIX=
APACHE_CONFDIR=/etc/apache2
fi
我只是在尋找一些澄清的問題是$ {參數##字}構造做,因爲從gnu bash的參考手冊是我也不清楚。手動定義它像這樣...
$ {參數#字} $ {參數##字}
字被擴展,以產生一個模式,就像在文件名擴展(見文件名擴展) 。如果模式匹配 參數擴展值的開頭,則 擴展的結果是匹配模式最短的 匹配模式('#'情況)或最長匹配模式( '# #'情況)刪除。如果參數爲'@'或'*',則依次對每個位置參數應用模式刪除操作 ,並且 擴展是結果列表。如果參數是以'@'或'*'爲下標的數組變量 ,則將模式移除操作依次應用 給數組的每個成員,並且擴展爲 結果列表。
這是否意味着第一行將一個空字符串存回SCRIPTNAME
或者我剛剛離開基地?
的''的特殊處理''你突出顯示的是'*'作爲'parameter',在'SCRIPTNAME =「$ {0 ## * /}」'中,'*'作爲'word'的一部分出現 – John1024
記錄,這個參數擴展不是一個GNU擴展 - 它是POSIX(雖然Bash也有一些自定義擴展形式)。更多的規範定義可以在[opengroup]找到(http://pubs.opengroup.org/ onlinepubs/009695399 /公共事業/ xcu_chap02.html#tag_02_06_02)。 – kojiro