Linux Shell 萬用字元 元字元 轉義符使用

2021-06-11 18:47:03 字數 3449 閱讀 7181

shell常見萬用字元:

字元含義例項

*匹配 0 或多個字元

a*b a與b之間可以有任意長度的任意字元, 也可以乙個也沒有, 如aabcb, axyzb, a012b, ab。

?匹配任意乙個字元

a?b a與b之間必須也只能有乙個字元, 可以是任意字元, 如aab, abb, acb, a0b。

[list]

匹配 list 中的任意單一字元

a[xyz]b a與b之間必須也只能有乙個字元, 但只能是 x 或 y 或 z, 如: axb, ayb, azb。

[!list]

匹配 除list 中的任意單一字元

a[!0-9]b a與b之間必須也只能有乙個字元, 但不能是阿拉伯數字, 如axb, aab, a-b。

[c1-c2]

匹配 c1-c2 中的任意單一字元 如:[0-9] [a-z]

a[0-9]b 0與9之間必須也只能有乙個字元 如a0b, a1b... a9b。

匹配 sring1 或 string2 (或更多)其一字串

ab a與b之間只能是abc或xyz或123這三個字串之一。

需要說明的是:萬用字元看起來有點象正規表示式語句,但是它與正規表示式不同的,不能相互混淆。把萬用字元理解為shell 特殊代號字元就可。而且涉及的只有,*,? ,{} 這幾種。

二、shell元字元(特殊字元 meta)

shell 除了有萬用字元之外,由shell 負責預先先解析後,將處理結果傳給命令列之外,shell還有一系列自己的其他特殊字元。

字元說明

ifs由 或 或 三者之一組成(我們常用 space )。

cr由 產生。

=設定變數。

$作變數或運算替換(請不要與 shell prompt 搞混了)。

>

重導向 stdout。 *

<

重導向 stdin。 *

|命令管線。 *

&重導向 file descriptor ,或將命令置於背境執行。 *

( )將其內的命令置於 nested subshell 執行,或用於運算或命令替換。 *

將其內的命令置於 non-named function 中執行,或用在變數替換的界定範圍。

;在前乙個命令結束時,而忽略其返回值,繼續執行下乙個命令。 *

&&在前乙個命令結束時,若返回值為 true,繼續執行下乙個命令。 *

||在前乙個命令結束時,若返回值為 false,繼續執行下乙個命令。 *

!執行 history 列表中的命令。*

加入」*」 都是作用在命令名直接。可以看到shell 元字元,基本是作用在命令上面,用作多命令分割(或者引數分割)。因此看到與萬用字元有相同的字元,但是實際上作用範圍不同。所以不會出現混淆。

以下是man bash 得到的英文解析:

metacharacter

a character that, when unquoted, separates words. one of the following:

| & ; ( ) < > space tab

control operator

a token that performs a control function. it is one of the following symbols:

|| & && ; ;; ( ) |

三、shell轉義符

有時候,我們想讓 萬用字元,或者元字元 變成普通字元,不需要使用它。那麼這裡我們就需要用到轉義符了。 shell提供轉義符有三種。

字元說明

『』(單引號)

又叫硬轉義,其內部所有的shell 元字元、萬用字元都會被關掉。注意,硬轉義中不允許出現』(單引號)。

「」(雙引號)

又叫軟轉義,其內部只允許出現特定的shell 元字元:$用於引數代換 `用於命令代替

\(反斜槓)

又叫轉義,去除其後緊跟的元字元或萬用字元的特殊意義。

man bash 英文解釋如下:

there are three quoting mechanisms: the escape character, single quotes, and double quotes.

例項:

?

12

3

4

5

6

7

8

9

10

11

[chengmo@localhost ~/shell]$ls\*.txt

ls: 無法訪問 *.txt: 沒有那個檔案或目錄

[chengmo@localhost ~/shell]$ls'*.txt'

ls: 無法訪問 *.txt: 沒有那個檔案或目錄

[chengmo@localhost ~/shell]$ls'a.txt'

a.txt

[chengmo@localhost ~/shell]$ls*.txt

a.txt b.txt

可以看到,加入了轉義符 「*」已經失去了萬用字元意義了。

四、shell解析指令碼的過程

如果用雙引號包括起來,shell檢測跳過了1-4步和9-10步,單引號包括起來,shell檢測就會跳過了1-10步。也就是說,雙引號 只經過引數擴充套件、命令代換和算術代換就可以送入執行步驟,而單引號轉義符直接會被送入執行步驟。而且,無論是雙引號轉義符還是單引號轉義符在執行的時候能夠告訴各個命令自身內部是一體的,但是其本身在執行時是並不是命令中文字的一部分。

linuxshell轉義符元字元萬用字元特殊字元彙總

萬用字元是由shell處理的 不是由所涉及到命令語句處理的,其實我們在shell各個命令中也沒有發現有這些萬用字元介紹 它只會出現在命令的 引數 裡 它不用在命令名稱裡,也不用在操作符上 當shell在 引數 中遇到了萬用字元時,shell會將其當作路徑或檔名去在磁碟上搜尋可能的匹配 若符合要求的匹...

Configparser模組 re模組 元字元

配置檔案模組,用於生成和修改常見配置文件 在這裡插入 片import configparser config configparser.configparser config default config bitbucket.org config bitbucket.org user hg conf...

C 友元函式 友元類 friend關鍵字

一 友元函式 1 友元函式允許在類外訪問該類中的任何成員,使用關鍵字friend說明。通過友元乙個普通函式或類的成員函式可以訪問封裝於另乙個類中的資料。從一定程度上講,友元是對資料隱藏和封裝的破壞,但是為了資料共享和提高程式的效率與可讀性,小的破壞是必要的。友元函式不屬於該類的成員函式,它是定義在類...