標籤:
字元 展開
*
這個 “*” 字元意味著匹配檔案名稱中的任一字元
shell 把 “*” 展開成了另外的東西 ,在 echo 命令被執行前。
~家目錄
算術運算式展開
算術運算式展開使用這種格式:
$((expression))
echo $((2+2))
算術運算式只支援整數(全部是數字,不帶小數點) ,但是能執行很多不同的操作。這裡是
一些它支援的操作符:
操作符 說明
+ 加
- 減
* 乘
/ 除(但是記住,因為展開只是支援整數除法,所以結果是整
數。 )
% 取餘,只是簡單的意味著, “餘數”
** 取冪
在算術運算式中空格並不重要,並且運算式可以嵌套。例如,5 的平方乘以 3:
[[email protected] ~]$ echo $(($((5**2)) * 3))
75
一對括弧可以用來把多個子運算式括起來。通過這個技術,我們可以重寫上面的例子,同
時用一個展開代替兩個,來得到一樣的結果:
[[email protected] ~]$ echo $(((5**2) * 3))
花括弧展開
與數學(a+b)(c+d)一樣 = ac+ad+bc+bd
通過它,你可以從一個包含花括弧的模式中建立多個文本字串。這是一個例子:
[[email protected]]# echo abc-{A,B,C}-CBA
abc-A-CBA abc-B-CBA abc-C-CBA
花括弧展開模式可能包含一個開頭部分叫做前序,一個結尾部分叫做附言。花括號運算式
本身可能包含一個由逗號分開的字串列表,或者一系列整數,或者單個的字串。
這個例題使用了一系列整數:
[[email protected] ~]$ echo Number_{1..5}
Number_1 Number_2 Number_3 Number_4 Number_5
一系列以倒序排列的字母:
[[email protected] ~]$ echo {Z..A}
Z Y X W V U T S R Q P O N M L K J I H G F E D C B A
花括弧展開可以嵌套:
[[email protected]]# echo a{A{1,2},B{3,4}}b
aA1b aA2b aB3b aB4b
最普遍的應用是,建立一系列的檔案或目錄列表。
例如,如果我們是攝影師,有大量的相片。我們想把這些相片按年月先後組織起來。首先,我們要建立一
系列以數值 “年-月” 形式命名的目錄。通過這種方式,目錄名按照年代順序排列。我們可以鍵
入整個目錄列表,但是工作量太大了,並且易於出錯。反而,我們可以這樣做:
[[email protected] ~]$ mkdir Pics
[[email protected] ~]$ cd Pics
[[email protected] Pics]$ mkdir {2007..2009}-0{1..9} {2007..2009}-{10..12}
[[email protected] Pics]$ ls
2007-01 2007-07 2008-01 2008-07 2009-01 2009-07
2007-02 2007-08 2008-02 2008-08 2009-02 2009-08
2007-03 2007-09 2008-03 2008-09 2009-03 2009-09
2007-04 2007-10 2008-04 2008-10 2009-04 2009-10
2007-05 2007-11 2008-05 2008-11 2009-05 2009-11
2007-06 2007-12 2008-06 2008-12 2009-06 2009-12
命令替換命令替換允許我們把一個命令的輸出作為一個展開模式來使用:echo $(ls) 雙引號引用的第一種類型,雙引號。如果你把文本放在雙引號中,shell 使用的特殊字元,除了 $,\ (反斜線) ,和 ‘(倒引號)之外,則失去它們的特殊含義,被當作一般字元來看待。這意味著單詞分割,路徑名展開,波浪線展開,和花括弧展開都被禁止,然而參數展開,算術展開,和命令替換仍然執行。使用雙引號,我們可以處理包含空格的檔案名稱。 單引號如果需要禁止所有的展開,我們使用單引號。輸出比較結果[[email protected] ~]$ echo text ~/*.txt {a,b} $(echo foo) $((2+2)) $USER
text /home/me/ls-output.txt a b foo 4 me
89
[[email protected] ~]$ echo "text ~/*.txt {a,b} $(echo foo) $((2+2)) $USER"
text ~/*.txt {a,b} foo 4 me
[[email protected] ~]$ echo ‘text ~/*.txt {a,b} $(echo foo) $((2+2)) $USER‘
text ~/*.txt {a,b} $(echo foo) $((2+2)) $USER 反引號 `ls` 逸出字元有時候我們只想引用單個字元。我們可以在字元之前加上一個反斜線,在這個上下文中叫做逸出字元。經常在雙引號中使用逸出字元,來有選擇地阻止展開。注意在單引號中,反斜線失去它的特殊含義, 它被看作一般字元。
Shell符號展開