您好,登錄后才能下訂單哦!
這篇文章將為大家詳細(xì)講解有關(guān)Shell命令行中特殊字符與其轉(zhuǎn)義的示例分析,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
特殊符號(hào)及其轉(zhuǎn)義
大家都知道在一個(gè)shell命令是由命令名和它的參數(shù)組成的, 比如 cat testfile
, 其中cat是命令名, testfile是參數(shù). shell將參數(shù)testfile傳遞給cat命令. 但是, 如果參數(shù)中含有特殊字符, 比如說*, *我們知道,是表示任意多個(gè)(包括0個(gè))任意字符. 那么shell的工作方式是,它會(huì)對這些特殊字符進(jìn)行預(yù)先處理, 然后再將處理的結(jié)果傳給那個(gè)命令.
比如說,如果你的當(dāng)前目錄有file, file1, file2 三個(gè)文件, 那么當(dāng)你執(zhí)行cat file*的時(shí)候, shell會(huì)對參數(shù)部分file*進(jìn)行預(yù)先處理, 由于*表示任意多個(gè)(包括0個(gè))任意字符,那么處理的結(jié)果便是file file1 file2,接下來,shell再將這個(gè)結(jié)果, 即file file1 file2傳遞給cat命令, 所以你看到的結(jié)果跟直接執(zhí)行cat file file1 file2是一樣的, 那就是三個(gè)文件的內(nèi)容都顯示在命令行終端.
實(shí)際上,我們有辦法看到shell處理的結(jié)果是什么,或者說真正執(zhí)行的命令是什么樣子的, 那就是在你要執(zhí)行的命令之前加上echo.
比如說,在上面的目錄下,你執(zhí)行echo cat file*
, 那么你將看到
cat file file1, file2
上面那條命令,就是經(jīng)過shell對參數(shù)的處理之后,真正執(zhí)行的命令.
但是很多時(shí)候,我們希望傳遞給這些命令的,就是這些參數(shù)本身, 比如說,你當(dāng)前目錄下有一個(gè)文件的文件名就叫test*, 同時(shí)還有另外一個(gè)文件, test1. 而你只想看test*的內(nèi)容, 這時(shí)候,如果你執(zhí)行
cat test*
的話,那么test*和test1的內(nèi)容都會(huì)被顯示出來,這時(shí)候怎么辦呢? 這里就涉及到特殊字符的轉(zhuǎn)義(escape)的問題了.所謂的轉(zhuǎn)義,意思就是去掉它的特殊含義.讓shell把他們當(dāng)做一般字符對待,不要進(jìn)行特殊處理.
在shell中,特殊字符的轉(zhuǎn)義有三種辦法
用\轉(zhuǎn)義: 把\字符放在特殊字符的前面
用單引號(hào)('')轉(zhuǎn)義: 用單引號(hào)把參數(shù)括起來
用雙引號(hào)("")轉(zhuǎn)義: 用雙引號(hào)把參數(shù)括起來
在上面的例子中,這三種方法都是有效率的,也就是說,下面的三個(gè)命令都能達(dá)到目的:
cat test\*
cat 'test*'
cat “test*”
三種轉(zhuǎn)義方法的范圍
在shell中,特殊字符是非常多的,而以上提到的三種轉(zhuǎn)義方法的范圍也不盡相同,其中第一種方法的范圍是最廣的,幾乎可以對所有的特殊字符進(jìn)行轉(zhuǎn)義,常見的用法是把\放在一個(gè)命令行的最后,這樣一個(gè)很長的命令就可以分為兩行或者更多行寫. 比如
echo this is a \ very long \ line
將顯示成
this is a very long line
在這里,其實(shí)就是\把換行符轉(zhuǎn)義了,讓它失去了換行的意思,同時(shí)阻止命令立刻執(zhí)行.
第二種轉(zhuǎn)義(單引號(hào))的范圍比第一種小,它可以阻止命令行立刻執(zhí)行,但是它不能讓換行符失去換行的意思. 所以
echo 'hello world'
將顯示成
hello world
第三種轉(zhuǎn)義(雙引號(hào))的范圍又比第二種小,單引號(hào)可以轉(zhuǎn)義"`", 而雙引號(hào)不行. 在shell中, "`"中間的東西將被視為命令替換. shell對參數(shù)進(jìn)行預(yù)先處理時(shí),將把兩個(gè)"`"中間的東西當(dāng)做shell命令進(jìn)行執(zhí)行,再將執(zhí)行結(jié)果替換掉他們本身. 舉個(gè)例子:
echo today is `date`
將顯示
today is Mon Oct 12 16:14:16 CST 2015
當(dāng)然,具體的日期跟你執(zhí)行這條命令的時(shí)期有關(guān). 總之,意思你應(yīng)該明白了. 再回到原來的問題,我們說單引號(hào)可以轉(zhuǎn)義"`", 而雙引號(hào)不行, 意思就是,單引號(hào)之間的"`"將失去它的特殊含義,而雙引號(hào)之間的"`"將依然有特殊含義,所以
echo 'today is `date`'
將顯示
today is `date`
而
echo “today is `date`”
將顯示
today is Mon Oct 12 16:23:23 CST 2015
常見的一些特殊字符
*
任意個(gè)任意字符
?
一個(gè)任意字符
[..] []
中的任意一個(gè)字符,這里也類似于正則表達(dá)式,中括號(hào)內(nèi)可以是具體的一些字符,如[abcd]也可以是用-指定的一個(gè)范圍,如[a-d]
#
注釋
(空格) 參數(shù)分隔符
cmd
命令替換
|
管道
&
后臺(tái)執(zhí)行
;
命令分隔符(可以在同一行執(zhí)行兩個(gè)命令,用;分割)
~
用戶home目錄
關(guān)于“Shell命令行中特殊字符與其轉(zhuǎn)義的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),請把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。