bash之花括號擴展(brace expansion )
- bash的全部擴展(expansion)以下:
Brace Expansion(花括號擴展)
Tilde Expansion(波浪號擴展)
Parameter and Variable Expansion (參數和變量擴展)
Command Substitution(命令置換)
Arithmetic Expansion(算數擴展)
Word Splitting(單詞分割)
Pathname Expansion(路徑擴展)
上面列舉的順序正是bash在擴展時的順序
- 花括號展開的定義(Brace Expansion)
花括號擴展也稱大括號擴展,是可讓bash生成任意字符串的一種擴展功能。它與「路徑擴展」很是類似,惟一不一樣的是生成的字符串能夠是不存在的路徑或者文件名
在bash中,花括號擴展在諸多擴展中優先級最高,所以相似於echo {a,b}$PATH的語句在完成花括號擴展以後的結果應該爲 a$PATH b$PATH,而對PATH環境變量的擴展要到後續的「參數和變量擴展」階段纔開始
- 花括號擴展的兩種格式3.1 第一類格式爲:preamble+{string1,string2,string3,...,stringN}+postcript左右的花括號是必須的,中間的字符串列表分別由逗號隔開,注意逗號先後不能有空格,若是string中有空格,則須要單引號或者雙引號擴起來bash在實際擴展時,會將preamble和花括號中的全部字符串(按照從左到右的順序)相連,最後分別加上postscript。此外,花括號中間至少有一個逗號,不然bash不會認爲花括號擴展,例如:echo {moneny},想要輸出money,須要改成echo{money,} 以下:[root@master01 ~]# echo {money}{money}[root@master01 ~]# echo {money,}money查看完整的例子(注意空格的處理)[root@master01 ~]# echo sp{el,il,al}lspell spill spall[root@master01 ~]# echo sp{el,il, al}lsp{el,il, al}l[root@master01 ~]# echo sp{el,il,' al'}lspell spill sp all[root@master01 ~]# echo sp{el,il," "al}lspell spill sp all[root@master01 ~]# echo sp{el,il,' 'al}lspell spill sp all[root@master01 ~]# echo sp{el,il," al"}lspell spill sp all3.2 第二類格式爲: preamble+{<START>..<END>..[INCR]}+postscript其中<START>..<END>組合而成的表達式術語叫作序列表達式(sequence expansion),表示一個特定的範圍。當<START>和<END>是數字,表明的是數字範圍;當<START>和<END>是單個字母時,表明是字符範圍(默認LC_ALL字符排列)。<START>和<END>必須同爲數字或者字母,不然bash不認爲是花括號擴展,而是原樣輸出。[root@master01 ~]# echo {1..12}1 2 3 4 5 6 7 8 9 10 11 12[root@master01 ~]# echo {3..-2}3 2 1 0 -1 -2[root@master01 ~]# echo {a..g}a b c d e f g[root@master01 ~]# echo {h..a}h g f e d c b a其中的<INCR>是可選的,表明的是區間範圍的遞增數,它必須是數字。例如:[root@master01 ~]# echo {0..10..2}0 2 4 6 8 10從0開始,每遞增2個數字就取出相應的數字。若是不指定<INCR>,那麼默認是1或者是-1,具體是1或者-1,要看前面區間範圍是遞增仍是遞減的,好比上面例子的{a..g}中默認是1,{h..a}默認爲-1另外,當<START>和<END>是數字時,咱們能夠經過數字前面加0來輸出結果長度保持一致,[root@master01 ~]# echo {1..10}1 2 3 4 5 6 7 8 9 10[root@master01 ~]# echo {01..10}01 02 03 04 05 06 07 08 09 10[root@master01 ~]# echo {001..10}001 002 003 004 005 006 007 008 009 010這樣格式長度同樣,會顯得很美觀
歡迎關注本站公眾號,獲取更多信息