国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

Linux|Centos|Ubuntu|系統(tǒng)進(jìn)程|Fedora|注冊(cè)表|Bios|Solaris|Windows7|Windows10|Windows11|windows server|

服務(wù)器之家 - 服務(wù)器系統(tǒng) - Linux - Linux Shell 通配符、元字符、轉(zhuǎn)義符使用實(shí)例介紹

Linux Shell 通配符、元字符、轉(zhuǎn)義符使用實(shí)例介紹

2019-05-19 17:42網(wǎng)絡(luò)服務(wù)器之家 Linux

說(shuō)到shell通配符(wildcard),大家在使用時(shí)候會(huì)經(jīng)常用到。 下面是一個(gè)實(shí)例: [chengmo@localhost ~/shell]$ ls a.txt b.txt c.old #2 [chengmo@localhost ~/shell]$ ls *.txt a.txt b.txt #3 [chengmo@localhost ~/shell]$ ls d*.txt ls: 無(wú)法訪問(wèn) d*.txt: 沒有那個(gè)文件或目錄 從

說(shuō)到shell通配符(wildcard),大家在使用時(shí)候會(huì)經(jīng)常用到。

下面是一個(gè)實(shí)例:

[chengmo@localhost ~/shell]$ ls 
a.txt b.txt c.old 

#2 

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

#3 

[chengmo@localhost ~/shell]$ ls d*.txt 
ls: 無(wú)法訪問(wèn) d*.txt: 沒有那個(gè)文件或目錄

從上面這個(gè)實(shí)例,不知道大家有沒有發(fā)現(xiàn)問(wèn)題呢。我們先了解一下,通配符相關(guān)知識(shí),再分析下這個(gè)實(shí)例吧。

一、linux shell通配符(wildcard) 

通配符是由shell處理的(不是由所涉及到命令語(yǔ)句處理的,其實(shí)我們?cè)趕hell各個(gè)命令中也沒有發(fā)現(xiàn)有這些通配符介紹), 它只會(huì)出現(xiàn)在 命令的“參數(shù)”里(它不用在 命令名稱里, 也不用在 操作符上)。當(dāng)shell在“參數(shù)”中遇到了通配符時(shí),shell會(huì)將其當(dāng)作路徑或文件名去在磁盤上搜尋可能的匹配:若符合要求的匹配存在,則進(jìn)行代換(路徑擴(kuò)展);否則就將該通配符作為一個(gè)普通字符傳遞給“命令”,然后再由命令進(jìn)行處理。總之,通配符 實(shí)際上就是一種shell實(shí)現(xiàn)的路徑擴(kuò)展功能。在 通配符被處理后, shell會(huì)先完成該命令的重組,然后再繼續(xù)處理重組后的命令,直至執(zhí)行該命令。 

我們回過(guò)頭分析上面命令吧:在第2個(gè)命令中,*.txt 實(shí)際shell搜索文件,找到了符合條件的文件,命令會(huì)變成:ls a.txt b.txt ,實(shí)際在執(zhí)行l(wèi)s 時(shí)候傳給它的是a.txt b.txt . 

而命令3,d*.txt 由于當(dāng)前目錄下面沒有這樣的文件或目錄,直接將”d*.txt” 作為ls 參數(shù),傳給了 ls .這個(gè)時(shí)候”*” 只是一個(gè)普通的 ls 參數(shù)而已,已經(jīng)失去了它通配意義。 由于找不到文件,所以會(huì)出現(xiàn):無(wú)法訪問(wèn)提示!

了解了shell通配符,我們現(xiàn)在看下,shell常見通配符有那一些了。

shell常見通配符:

字符 含義 實(shí)例
* 匹配 0 或多個(gè)字符 a*b  a與b之間可以有任意長(zhǎng)度的任意字符, 也可以一個(gè)也沒有, 如aabcb, axyzb, a012b, ab。
? 匹配任意一個(gè)字符 a?b  a與b之間必須也只能有一個(gè)字符, 可以是任意字符, 如aab, abb, acb, a0b。
[list]  匹配 list 中的任意單一字符 a[xyz]b   a與b之間必須也只能有一個(gè)字符, 但只能是 x 或 y 或 z, 如: axb, ayb, azb。
[!list]  匹配 除list 中的任意單一字符 a[!0-9]b  a與b之間必須也只能有一個(gè)字符, 但不能是阿拉伯?dāng)?shù)字, 如axb, aab, a-b。
[c1-c2] 匹配 c1-c2 中的任意單一字符 如:[0-9] [a-z] a[0-9]b  0與9之間必須也只能有一個(gè)字符 如a0b, a1b... a9b。
{string1,string2,...} 匹配 sring1 或 string2 (或更多)其一字符串 a{abc,xyz,123}b    a與b之間只能是abc或xyz或123這三個(gè)字符串之一。

需要說(shuō)明的是:通配符看起來(lái)有點(diǎn)象正則表達(dá)式語(yǔ)句,但是它與正則表達(dá)式不同的,不能相互混淆。把通配符理解為shell 特殊代號(hào)字符就可。而且涉及的只有,*,? [] ,{} 這幾種。

二、shell元字符(特殊字符 Meta)

shell 除了有通配符之外,由shell 負(fù)責(zé)預(yù)先先解析后,將處理結(jié)果傳給命令行之外,shell還有一系列自己的其他特殊字符。

字符 說(shuō)明
IFS 由 <space> 或 <tab> 或 <enter> 三者之一組成(我們常用 space )。
CR 由 <enter> 產(chǎn)生。
= 設(shè)定變量。
$ 作變量或運(yùn)算替換(請(qǐng)不要與 shell prompt 搞混了)。
> 重導(dǎo)向 stdout。 *
< 重導(dǎo)向 stdin。 *
| 命令管線。 *
& 重導(dǎo)向 file descriptor ,或?qū)⒚钪糜诒尘硤?zhí)行。 *
( ) 將其內(nèi)的命令置于 nested subshell 執(zhí)行,或用于運(yùn)算或命令替換。 *
{ } 將其內(nèi)的命令置于 non-named function 中執(zhí)行,或用在變量替換的界定范圍。
; 在前一個(gè)命令結(jié)束時(shí),而忽略其返回值,繼續(xù)執(zhí)行下一個(gè)命令。 *
&& 在前一個(gè)命令結(jié)束時(shí),若返回值為 true,繼續(xù)執(zhí)行下一個(gè)命令。 *
|| 在前一個(gè)命令結(jié)束時(shí),若返回值為 false,繼續(xù)執(zhí)行下一個(gè)命令。 *
! 執(zhí)行 history 列表中的命令。*

加入”*” 都是作用在命令名直接。可以看到shell 元字符,基本是作用在命令上面,用作多命令分割(或者參數(shù)分割)。因此看到與通配符有相同的字符,但是實(shí)際上作用范圍不同。所以不會(huì)出現(xiàn)混淆。 

以下是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:
              || & && ; ;; ( ) | <newline>

三、shell轉(zhuǎn)義符 

有時(shí)候,我們想讓 通配符,或者元字符 變成普通字符,不需要使用它。那么這里我們就需要用到轉(zhuǎn)義符了。 shell提供轉(zhuǎn)義符有三種。

 

字符 說(shuō)明
‘’(單引號(hào)) 又叫硬轉(zhuǎn)義,其內(nèi)部所有的shell 元字符、通配符都會(huì)被關(guān)掉。注意,硬轉(zhuǎn)義中不允許出現(xiàn)’(單引號(hào))。
“”(雙引號(hào)) 又叫軟轉(zhuǎn)義,其內(nèi)部只允許出現(xiàn)特定的shell 元字符:$用于參數(shù)代換 `用于命令代替
\(反斜杠)   又叫轉(zhuǎn)義,去除其后緊跟的元字符或通配符的特殊意義。

 

man bash 英文解釋如下:

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

實(shí)例:

[chengmo@localhost ~/shell]$ ls \*.txt
ls: 無(wú)法訪問(wèn) *.txt: 沒有那個(gè)文件或目錄

[chengmo@localhost ~/shell]$ ls '*.txt'
ls: 無(wú)法訪問(wèn) *.txt: 沒有那個(gè)文件或目錄

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

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

可以看到,加入了轉(zhuǎn)義符 “*”已經(jīng)失去了通配符意義了。

四、shell解析腳本的過(guò)程 

看到上面說(shuō)的這些,想必大家會(huì)問(wèn)到這個(gè)問(wèn)題是,有這么想特殊字符,通配符,那么 shell在得到一條命令,到達(dá)是怎么樣處理的呢?我們看下下面的圖:

Linux Shell 通配符、元字符、轉(zhuǎn)義符使用實(shí)例介紹

如果用雙引號(hào)包括起來(lái),shell檢測(cè)跳過(guò)了1-4步和9-10步,單引號(hào)包括起來(lái),shell檢測(cè)就會(huì)跳過(guò)了1-10步。也就是說(shuō),雙引號(hào) 只經(jīng)過(guò)參數(shù)擴(kuò)展、命令代換和算術(shù)代換就可以送入執(zhí)行步驟,而單引號(hào)轉(zhuǎn)義符直接會(huì)被送入執(zhí)行步驟。而且,無(wú)論是雙引號(hào)轉(zhuǎn)義符還是單引號(hào)轉(zhuǎn)義符在執(zhí)行的時(shí)候能夠告訴各個(gè)命令自身內(nèi)部是一體的,但是其本身在執(zhí)行時(shí)是并不是命令中文本的一部分。

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 日本少妇bbbb爽爽bbb美 | 免费精品视频 | 日本中文字幕在线视频 | 国变精品美女久久久久av爽 | 久草视频在线播放 | 黄色免费美女网站 | 亚洲 成人 av | 中文字幕亚洲欧美日韩在线不卡 | 久久久天堂国产精品 | 成人免费网站在线 | 在线一区二区三区做爰视频网站 | 欧美日韩国产一区二区三区 | 婷婷精品久久久久久久久久不卡 | 中文字幕 国产 | 亚洲精品日本 | 希岛爱理一区二区三区av高清 | 国产精品久久久久久中文字 | 在线观看午夜免费视频 | 在线精品一区 | 伊人久久国产 | 96久久久| 国产综合亚洲精品一区二 | 欧美成人综合在线 | 欧美日韩综合视频 | 久久精品国产99精品国产亚洲性色 | 国产情侣91 | 精品国产欧美 | 久久亚洲综合 | 91精品国产欧美一区二区成人 | 精品在线一区二区三区 | 91福利视频导航 | 国产精品视频免费观看 | 国产精品久久久久久久久久久久 | 1区2区视频 | 日狠狠 | 日本中文字幕免费 | 天天拍天天干天天操 | 骚虎av| 粉嫩欧美一区二区三区高清影视 | 日本不卡一区二区三区在线观看 | 久久精品伊人 |