引用符號在解析器中保護特殊元字元和引數擴充套件,其使用方法有3種:反斜槓(\),單引號(』『),雙引號(「」)
。單引號和雙引號必須匹配使用,均可在解析器中保護特殊元字元和萬用字元,但是單引號(硬轉義)主要用於資訊的原樣輸出,防止任何變數的擴充套件,雙引號(軟轉義)允許變數擴充套件、轉義符和命令替換。單引號保護雙引號,雙引號保護單引號。
1. 反斜槓
反斜槓通過解析器將1個字元轉化為引用符號或轉義。
1)在單引號內使用反斜槓,反斜槓不會被解析,保持原樣輸出。
2)在雙引號內使用反斜槓,主要用於美元符號($),反單引號(``),雙引號(""),單引號('')的輸出,以及轉義符的解析,其中單引號的輸出中,反斜槓和雙引號不能同時使用。
3)不使用單引號和雙引號(如:echo \,輸出為空),則反斜槓可以被看做自動忽略。
2. 單引號
1)單引號內不允許任何變數、元字元、萬用字元、轉義符的解析,均被原樣輸出。
2)使用雙引號或反斜槓轉義可顯示輸出單引號,但是雙引號和反斜槓不能被同時使用。
如命令:echo 「\'」,輸出結果會為(\'),而不是(')
3)可解析正規表示式,與sed和grep命令配合使用
3. 雙引號
保護特殊元字元和萬用字元不被shell解析,但是允許變數和命令替換,以及轉義符的解析。
4. 附錄
在此順便學習一下linux常見的特殊字元,包括萬用字元、轉義符和元字元。
4.1 萬用字元(wildcard)
字元含義例項*
匹配乙個或多個字元
a*b a與b之間可以有任意長度的字元
?匹配任意乙個字元
a?b a與b之間必須也只能有乙個字元
[list]
匹配list中任意單一字元
a[xyz]b a與b之間必須也只能有乙個[xyz]之間的字元
a[0-9]b a與b之間必須也只能有乙個0-9之間的數字字元
a[!0-9]b a與b之間有且只有乙個字元,同時字元不能為0-9
匹配字串列表中的任一字串
ab a與b之間只能為abc或xyz或123
需要說明的是,萬用字元與正規表示式語句有些相似,但它與正規表示式不同,只能將其理解為shell特殊字元即可,而且只涉及*,?,和{}。
4.2 元字元(meta)
字元說明
;命令分隔符,在前乙個命令結束時,忽略其返回值,繼續執行下乙個命令
&後台執行命令,最大的好處是無需等待命令執行結束,就可以在同一命令列下繼續輸入命令
=變數名=值,為變數賦值。注意"="左右緊跟變數名和值,中間不要有空格
$變數值替換,"$變數名"替換為shell變數的"值",為避免在文字連線時混淆,請使用$
>
輸出重定向,prog > file 將標準輸出重定向到檔案(覆蓋原檔案內容)
>>
輸出重定向,prog >> file 將標準輸出追加到檔案
<
輸入重定向,prog < file 從檔案file中獲取標準輸入
|管道命令,例:p1 | p2 將p1的標準輸出作為p2的標準輸入
()在子shell中執行命令,或用於運算,或用於命令替換($(command))
{}在當前shell中執行命令,或用在變數替換的界定範圍(例如上面的$用法)
&&前乙個命令執行成功後,才繼續執行下乙個命令。例:p1 && p2 ,若p1執行成功後,才執行p2,反之,不執行p2
||前乙個命令執行失敗後,才繼續執行下乙個命令。例:p1 || p2 ,若p1執行成功後,不執行p2,反之,才執行p2
!執行歷史記錄(history列表)中的命令,如!1
~使用者主目錄
4.3 轉義符
shell提供的轉義符有3中:單引號(''),雙引號(""),反斜槓(\)。轉義符已在上述內容中進行了詳細介紹,在此只是對其做乙個簡單總結。
字元說明
''(單引號)
硬轉義,其內部所有的shell元字元、萬用字元等都不會被解析,用於引數的原樣輸出。注意,硬轉義中不允許再出現單引號
""(雙引號)
軟轉義,可用於保護元字元和萬用字元,但是允許變數和命令替換的擴充套件,也允許反斜槓轉義符的解析
\(反斜槓)
轉義,保護元字元或萬用字元不被shell解析,主要用於雙引號,單引號,反單引號和美元符號
與echo和sed連用時,常用的反斜槓轉義字元如下表所示:
轉義符意義
\a響鈴字元
\b後退符,即刪除前乙個字元
\c輸出不換行,與/n作用相反
\d以「星期、月、日」表示日期
\f換行,但游標仍停留在原處
\h或\h
顯示基本主機名或顯示完整的主機名
\t或\t
24小時或12小時制時間
\n輸出換行
\r游標移至行首,並且不換行
\s當前shell的名稱,如bash
\t插入tab鍵
\u當前登入shell的使用者名稱
\vbash版本
\w當前工作目錄
\w當前工作目錄的基名
\\反斜槓\\,有無雙引號,結果相同
\$美元符號$,有無雙引號,結果相同
\"雙引號「,有無雙引號,結果相同
\'單引號』,不能與雙引號同時使用
\`反單引號`,有無雙引號,結果相同
\nnn
插入八進位製所代表的ascii字元
Linux 符號命令及符號問題
1 回車 r 本義是游標重新回到本行開頭,r的英文return,控制字元可以寫成 cr,即 carriage return 換行 n 本義是游標往下一行 不一定到下一行行首 n 的英文 newline,控制字元可以寫成 lf,即 line feed。2 windows下,記事本不支援 n 換行,它只...
bash 命令列 歷史命令 命令別名 引用符號
bash 一些用法 shell 子shell bash 1.命令歷史 命令不全 2.管道 重定向 3.命令別名 4.命令列編輯 5.命令名展開 6.檔名通配 7.變數 8.程式設計,指令碼游標跳 ctrl a 跳到命令列首 ctrl e 跳到命令行尾 ctrl u 刪除游標至命令列首的內容 ctrl...
弱符號與強符號,弱引用與強引用
對c c 而言,編譯器預設函式和初始化了的全域性變數為強符號。未初始化的全域性變數為弱符號。此處弱符號與強符號均是針對定義來說的,不是針對符號的引用。也可以通過gcc的 attribute weak 來定義任何乙個強符號為弱符號。cpp view plain copy extern in ext i...