我回顧我的一些舊的代碼和跨越這句法來了,但我忘了到底是什麼意思:-)
extractDir="${downloadFileName%.*}-tmp"
,我發現搜索的唯一信息是指命令的列表,但是這僅僅是一個變量。 這個花括號語法在bash中是什麼意思?
我回顧我的一些舊的代碼和跨越這句法來了,但我忘了到底是什麼意思:-)
extractDir="${downloadFileName%.*}-tmp"
,我發現搜索的唯一信息是指命令的列表,但是這僅僅是一個變量。 這個花括號語法在bash中是什麼意思?
在這種情況下,它是一個parameter substitution。
的${variable%.*}
裝置採取的$variable
值,從該值的尾剝去圖案.*
(助記符:百分比具有在尾一個「T」),並給出了結果。 (與此相反,${variable#xyz}
指該變量的值的標頭中去除xyz
,因爲(助記符)哈希具有在頭部爲「H」。)
鑑於:
downloadFileName=abc.tar.gz
extractDir=abc.tar-tmp
替代符號:
extractDir=${downloadFileName%%.*}
產生
abc-tmp
的%%
意味着刪除最長的尾巴;相應地,##
表示刪除最長的匹配頭。
謝謝你的徹底答案! – 2012-03-04 21:50:28
@Shane:你確定嗎?在Bash?我在Mac OS X 10.10上幾乎完全打補丁的Bash 4.3(4.3.27(2))不喜歡它:'downloadFileName = abc.tar.gz; echo $ {$ {downloadFileName#abc。}%。gz}'generate:'bash-4.3:$ {$ {downloadFileName#abc。}%。gz}:bad substitution'。你能指定哪個平臺和哪個版本的Bash? – 2014-10-27 02:19:25
在Zsh(** not Bash **)中,這些也可以嵌套(即$ {$ {downloadFilename#abc。}%。gz}得到「tar」)。感謝@JonathanLeffler的捕獲。 – Shane 2014-10-27 23:58:37
它用於展開一個環境變量,該環境變量與一些不是變量的文本相鄰,所以shell不包含變量名中的全部內容。
從*綜合* [BASH參考手冊](http://www.gnu.org/software/bash/manual/bashref.html)開始......它包含在[參數擴展](http:///www.gnu.org/software/bash/manual/bashref.html#Shell-Parameter-Expansion)。 (花括號的意思是當* *之前有''''符號時)。 – 2012-03-04 21:41:20