歡迎您光臨本站 註冊首頁

bash shell 中的擴展--花括弧擴展和波浪線擴展

←手機掃碼閱讀     火星人 @ 2014-03-08 , reply:0
shell 中的擴展--花括弧擴展和波浪線擴展----正在學習shell,途中做些筆記,整理整理,方便以後翻閱.---- ---- RHEL_6.2_x64,GNU bash version 4.1.2(1)-release ----
總述: shell 中有七種類型的擴展,他們分別是:花括弧擴展(brace expansion)、波浪線擴展(tilde expansion)、參數和變數擴展(parameter and variable expansion)、命令替換(command substitution)、算術擴展(arithmetic expansion)、詞的拆分(word splitting)和路徑擴展(pathname expansion). 進程替換(process substitution)只有在個別支持的系統中有.有說8種的就是加上了進程替換,有說9種的是把參數和變數擴展看成兩個.下面是man shell手冊關於擴展的部分:Expansion is performed on the command line after it has been split into words. There are seven kinds of expansion performed: brace expansion, tilde expansion, parameter and variable expansion, command substitution, arithmetic expansion, word splitting, and pathname expansion.On systems that can support it, there is an additional expansion available: process substitution. 擴展的順序是:花括弧擴展,波浪線擴展,參數,變數和算術擴展還有命令替換(按照從左到右的順序),詞的拆分,最后是路徑擴展.只有花括弧擴展,詞的拆分和路徑擴展在擴展前後的詞數會發生改變;命令行的擴展是在拆分成詞之後進行的.其他擴展總是將一個詞擴展為一個詞. 唯一的例外是上面提到的 "$@" 和"${name[@]}"

下面是shell擴展中的--花括弧擴展(brace expansion)和波浪線擴展(tilde expansion): 1)花括弧擴展(Brace Expansion)
描述: 花括弧擴展是一種可能產生任意字元串的機制.這種機制類似於路徑擴展,但是並不需要存在相應的文件.花括弧擴展的模式是一個可選的前導字元,後面跟著一系列逗號分隔的字元串,包含在一對花括弧中,再後面是一個可選的附言.前導被添加到花括弧中的每個字元串前面,附言被附加到每個結果字元串之後, 從左到右進行擴展. 用法: 花括弧擴展可以嵌套.擴展字元串的結果沒有排序;而是保留了從左到右的順序.例如,echo a{d,c,b}e 擴展為:ade ace abe.花括弧擴展是在任何其他擴展之前進行的,任何對其他擴展有特殊意義的字元都保留在結果中.它是嚴格字面上的. Bash不會對擴展的上下文或花括弧中的文本做任何語義上的解釋. 正確的花括弧擴展包含沒有引用的左括弧和右括弧,以及至少一個沒有引用的逗號.任何不正確的表達式都不會被改變.可以用反斜杠來引用括弧或逗號來阻止將它們識別為花括弧表達式的一部分.為了避免與參數擴展衝突,字元串${ 不被認為有效的組合.這種結構通常用來簡寫字元串的公共前綴,例如: mkdir /usr/local/src/bash/{old,new,dist,bugs} 或者: chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}}
③注意: 花括弧擴展導致了與歷史版本 sh 的一點不兼容.在左括弧或右括弧作為詞的一部分出現時, sh 不會對它們進行特殊處理,會在輸出中保留它們.Bash 將括弧從花括弧擴展結果的詞中刪除.例如,向 sh 輸入 file{1,2} 會導致不變的輸出.同樣的輸入在 bash 進行擴展之後,會輸出 file1 file2 . 如果需要同 sh 嚴格地保持兼容,需要在啟動 bash 的時候使用 B 選項,或者使用set 命令加上 B 選項來禁用花括弧擴展.

2)波浪線擴展(tilde expansion) 描述: 如果一個字以非引用的波浪線開始,所有的字元(如果這些字元前沒有未引用的斜杠)被認為是一個波浪線前綴. 用法: 如果在波浪線前綴中沒有字元被引用,那麼這個波浪線後面跟的字元就被當作一個可能的登陸名. 如果這個登陸名是空字元串,這個波浪線就被shell變數HOME的值代替. 如果HOME沒有預先設置,就用當前用戶的HOME目錄來進行替換,否則就用指定的登陸名的HOME目錄替換. 如果波浪線前綴是 「~ 」,shell變數PWD的值替換波浪線前綴. 如果波浪線前綴是 「~-」,shell變數OLDPWD的值,如果預先設置的話,就進行替換.
如果波浪線前綴是個數字n,則把~n替換成目錄堆棧(用dirs命令可以查看目錄堆棧)的第n個元素.

本文出自 「非同小可」 博客,請務必保留此出處http://xuke1668.blog.51cto.com/2129485/862217


[火星人 ] bash shell 中的擴展--花括弧擴展和波浪線擴展已經有997次圍觀

http://coctec.com/docs/linux/show-post-45901.html