linux shell特殊字元詳解彙總

在南京看海發表於2016-09-13

#    註釋
1、在shell檔案的行首,作為include標記:#!/bin/bash。
2、在其他地方使用,作為註釋,#後面的內容不會執行。
3、在單引號/雙引號中間,或\#等表示#本身,不是註釋。
      一個#表示從左邊擷取掉最短的匹配。
      兩個#表示從左邊擷取掉最長的匹配。
     echo ${PATH#*:}     引數替換,不是一個註釋。
     echo $((2#101011))  數制轉換,不是一個註釋。

 

;     分隔
1、命令分隔,在一行中寫多個命令。 
      ls;date;pwd
2、在條件中的if和then如果放在同一行,也用;分隔。


;;     連續分號 
       case條件的結束。
 

.      點號

1、相當於source命令。
2、檔名的字首,隱藏檔案。
3、.當前目錄,..父目錄。
4、正規表示式:匹配任意單個字元。


""    雙引號
1、部分引用,雙引號包圍內容,允許變數擴充套件,支援萬用字元擴充套件,也允許轉義字元。
2、如果字串內部出現雙引號,需要轉義。
    
 
'      單引號
1、全引用,禁止變數擴充套件,不進行萬用字元擴充套件,所有字元都作為字元本身。
2、單引號必須成對出現 。


\     反斜槓
1、放在特殊符號前,作為轉義符。
2、放在一行指令最末端,表示緊接著的回車失效,後續新行依然是指令的一部分。

 

/     斜槓
1、目錄分隔符,僅有一個斜槓表示根目錄,以斜槓開頭的路徑表示從根目錄開始的絕對路徑。
2、除法運算子

 

,     逗號
1、用在一連串數學表示式中,所有表示式都被執行,但只有最後一個結果被返回。
2、用於引數替換中,表示首字母小寫,如果兩個逗號,則表示全部小寫。
      str="GOOD"
      echo ${str,}  #輸出gOOD
      echo ${str,,} #輸出good
 
 
`    後引用
     命令替換,後引號包圍內容作為命令執行,可將執行結果賦值給變數。

 

:     冒號
1、空命令,但有返回值(0:true)。
2、可做while死迴圈的條件。   while :
3、在if/then中表示什麼都不做,引出分支
4、設定預設引數。   : ${username=`whoami`}
5、變數替換:    : ${HOSTNAME?} ${USER?} ${MAIL?}
6、在和 > (重定向操作符)結合使用時,把一個檔案截斷到0 長度,沒有修改它的許可權;如果檔案在之前並不存在,那麼就建立它.
      如:     
           : > data.xxx #檔案"data.xxx"現在被清空了. 與 cat /dev/null >data.xxx 的作用相同 然而,這不會產生一個新的程式,因為":"是一個內建命令.
7、在和>>重定向操作符結合使用時,將不會對想要附加的檔案產生任何影響.如果檔案不存在,將建立.
8、作為域分隔符,比如環境變數$PATH,或者passwd檔案中,都有冒號作為域分隔符的存在。
9、作為註釋,#後面的內容不會被檢查,但:後面的內容會被檢查。


!  感嘆號
1、表示一個反邏輯,比如!=表示不等於。
2、取反,比如ls ok[!a-z]  #表示ok後面不是緊接其他字元。
3、在不同的環境裡,感嘆號也可以出現在間接變數引用裡面。
4、命令列中,可以用於歷史命令機制的條件。


*     星號
1、作為萬用字元,匹配0個或多個字元。
2、數學乘法。


**   雙星號
      冪運算
 
 
?    問號
1、條件測試。
2、萬用字元,匹配任意一個字元。
3、正規表示式中,表示通配前面的規則0次或者1次。
4、表示c語言中的三目運算(a>b?a:b)
 
 
$    美元符號
1、取變數的值 echo $PATH
2、正規表示式中表示行的結尾


${} 
      引數替換 ${PAHT}
   
  
$'...'
      引用內容展開,執行單引號內的轉義內容,這種方式會將引號內的一個或者多個[\]轉義後的八進位制,十六進位制值展開到ASCII或UNICODE字元。

   
$* 
      所有引數作為一個整體返回(字串)
 
 
$@ 
      將每個引數作為單元返回一個引數列表。
   
  
$# 
      引數個數
 
 
$$ 
      執行當前指令碼的程式ID。
 
 
$? 
      返回最後一次執行命令、函式或指令碼的結果狀態。執行正確為0,有錯則非0.
 

( )   圓括號
1、命令組,其中的命令在子Shell中執行   (a=3;echo $a) 其中的變數不可被父shell獲取,但子shell可以使用父shell中變數。
2、陣列初始化: array=(a,b,c)


{ }  花括號 
      程式碼塊,即一個匿名函式,但其中定義的變數在後面依然可用。

 
{ } \; 
      用在find的-exec中 $find -name *.txt -exec cat {} \;

 

[ ]   中括號
1、測試 [-z $1]
2、陣列元素 a[1]='test'
3、表示字符集的範圍,在正規表示式中,方括號表示該位置可以匹配的字符集範圍。


[[]]
      表示測試 使用[[ ... ]]條件判斷結構, 而不是[ ... ], 能夠防止指令碼中的許多邏輯錯誤. 比如, &&, ||, <, 和> 操作符能夠正常存在於[[ ]]條件判斷結構中, 但是如果出現在[ ]結構中的話, 會報錯.


$[...]
      表示整數擴充套件,在方括號裡面執行整數表示式。
      x=1
      y=2
      echo $[$x+$y]

 

(( ))
      表示整數擴充套件,和上面的$[]差不多,但上者返回表示式的值,而本符號不返回值。
   

>
     重定向: ls -a > a.txt   #重定向ls -a的輸出到a.txt,如果檔案存在則覆蓋
&>
     重定向:ls -a &> a.txt  #重定向ls -a的標準輸出(stdout)和標準錯誤(stderr)到檔案a.txt
>&
      重定向:ls -a >&2       #重定向ls -a的標準輸出(stdout)到標準錯誤(stderr)中。
>> 
      重定向: ls -a >> a.txt  #重定向ls -a的輸出(同>)追加到a.txt,如果檔案不存在則建立。
<>
      重定向: [1]<>a.txt      #開啟a.txt,並且指定1位檔案描述符,檔案不存在則建立。
<< 
      重定向: 用來將後續的內容重定向到左側命令的stdin中。
<<<
      重定向: 和<<類似。
>| 
      強制重定向(即使設定了noclobber 選項--就是-C 選項).這將強制的覆蓋一個現存檔案.

      管道:將管道前的命令產生的輸出(stdout)作為管道後的命令的輸入(stdin)。
      ls -a|grep ok


>,<  
      大/小於號:用於變數的 ASCII比較。
      if [[ "$veg1" < "$veg2" ]]


\<,\> 
      正規表示式中的單詞邊界.

      如:  bash$grep '\<the\>' textfile



      命令後跟 &,則在後臺執行

|| 
      邏輯或,用在兩個命令之間的時候,表示在前一個命令結束時,若返回值為 false,繼續執行下一個命令
  
&& 
      邏輯與,用在兩個命令之間的時候,表示在前一個命令結束時,若返回值為 true,繼續執行下一個命令
  
-
1、引數選項
2、減號
3、重定向stdin和stdout:cd /source/directory && tar cf - . ) | (cd /dest/directory && tar xpvf -)
4、先前的工作目錄 cd -
       注:使用-開頭的檔名和變數名可能會出現一些問題

 

  

+   
1、一個命令或者過濾器的選項標記。
2、加法。
3、正規表示式中,表示的是其前的這個匹配規則匹配最少一次。
4、引數替換中,+字首表示替代值。

 

 

 

=
1、賦值操作
2、在比較測試中作為比較符出現,這裡要注意,如果在中括號中作為比較出現,需要有空格符在等號左右兩側。


%
1、算術運算中求模操作符,即除法運算後的餘數
2、引數替換中,可以作為模式匹配
3、一個%表示從右邊擷取最短的匹配
4、兩個%表示從右邊擷取最長的匹配


      home目錄,和$HOME一樣的。
 
~+ 
      當前工作目錄,這個和內建變數$PWD一樣。
 
~- 
      先前工作目錄,這個和內部變數$OLDPWD一樣。
 
=~ 
      正規表示式匹配,可用在[[]]測試中。
      var="this is so good"
      [[ "$var" =~ tf*good ]] && echo "ok" || echo "false"
 

1、正規表示式中表示行首
2、引數替換中,一個^表示第一個字母大寫,兩個^表示全部大寫。
 
 
$IFS 
用來做一些輸入命令的分隔符, 預設情況下是空格.還包括製表符、空行、或者這幾種組合。

 

 

 

 

 

 

 

 
控制字元修改終端或文字顯示的行為. . 控制字元以CONTROL + key這種方式進行組合(同時按下). 控制字元也可以使用8進位制或16進製表示法來進行表示, 但是前邊必須要加上轉義符.
控制字元在指令碼中不能正常使用.


Ctl-B    退格(非破壞性的), 就是退格但是不刪掉前面的字元.


Ctl-C    終結一個前臺作業.


Ctl-D   從一個shell中登出(與exit很相像).
            "EOF"(檔案結束). 這也能從stdin中終止輸入.
            在console或者在xterm視窗中輸入的時候, Ctl-D將刪除游標下字元. 當沒有字元時, Ctl-D將退出當前會話, 在一個xterm視窗中, 則會產生關閉此視窗的效果.


Ctl-G  "嗶" (beep). 在一些老式的打字機終端上, 它會響一下鈴.


Ctl-H  "退格"(破壞性的), 就是在退格之後, 還要刪掉前邊的字元.


Ctl-I     水平製表符.


Ctl-J     重起一行(換一行併到行首). 在指令碼中, 也可以使用8進製表示法 -- '\012' 或者16進製表示法 -- '\x0a' 來表示.


Ctl-K    垂直製表符.


Ctl-L    清屏(清除終端的螢幕顯示). 在終端中, 與clear命令的效果相同. 當傳送到印表機上時, Ctl-L會讓印表機將列印紙捲到最後.


Ctl-M   回車.


Ctl-Q    恢復(XON).在一個終端中恢復stdin.


Ctl-S    掛起(XOFF).
             在一個終端中凍結stdin. (使用Ctl-Q可以恢復輸入.)


Ctl-U    刪除游標到行首的所有字元. 在某些設定下, 不管游標的所在位置Ctl-U都將刪除整行輸入.


Ctl-V    當輸入字元時, Ctl-V允許插入控制字元. 


Ctl-V    主要用於文字編輯.

 

Ctl-W    當在控制檯或一個xterm視窗敲入文字時, Ctl-W將會刪除當前游標到左邊最近一個空格間的全部字元. 在某些設定下, Ctl-W將會刪除當前游標到左邊第一個非字母或數字之間的全部字元.

 

 

 

 

 

相關文章