Unix中如何利用轉(zhuǎn)義和引用來管理元字符

這篇文章給大家分享的是有關(guān)Unix中如何利用轉(zhuǎn)義和引用來管理元字符的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過來看看吧。

創(chuàng)新互聯(lián)是一家做網(wǎng)站、網(wǎng)站建設(shè),提供網(wǎng)頁設(shè)計(jì),網(wǎng)站設(shè)計(jì),網(wǎng)站制作,建網(wǎng)站,按需定制制作,網(wǎng)站開發(fā)公司,于2013年開始是互聯(lián)行業(yè)建設(shè)者,服務(wù)者。以提升客戶品牌價(jià)值為核心業(yè)務(wù),全程參與項(xiàng)目的網(wǎng)站策劃設(shè)計(jì)制作,前端開發(fā),后臺(tái)程序制作以及后期項(xiàng)目運(yùn)營(yíng)并提出專業(yè)建議和思路。

在Unix操作系統(tǒng)中有一類特殊的字符,叫做元字符。他們?cè)谙到y(tǒng)中表示特殊的含義。如*號(hào)與?號(hào),操作系統(tǒng)認(rèn)為這些元字符是通配符。如果在路經(jīng)、文件名或者命令參數(shù)中有這些元字符的話,就會(huì)引起操作系統(tǒng)的誤解。為此在系統(tǒng)中要采用一些方法,能夠讓操作系統(tǒng)將這些元字符當(dāng)作普通字符來對(duì)待。在Unix系統(tǒng)中,就是采用轉(zhuǎn)義和引用這兩種方式來處理。系統(tǒng)工程師需要明白的是,這兩種解決方案的差異。并在特定的情況下,采用合適的解決方式。

一、轉(zhuǎn)義功能的應(yīng)用。

其實(shí)轉(zhuǎn)義機(jī)制不僅僅在Unix操作系統(tǒng)上有,在其他的編程語言中也有類似的處理機(jī)制。如果各位讀者有程序開發(fā)經(jīng)驗(yàn)的話,那么可能更加容易了解這個(gè)轉(zhuǎn)義功能。簡(jiǎn)單的說,轉(zhuǎn)義功能就是指在一些具有特殊含義的元字符前面加上一個(gè)轉(zhuǎn)義字符\,目的是告訴操作系統(tǒng)這是一個(gè)普通的字符,取消元字符的特殊意義。如*本來代表通配符,如ls *則表示所有的文件與目錄。而\*就是將*號(hào)當(dāng)作一個(gè)普通的字符來對(duì)待,系統(tǒng)不會(huì)再認(rèn)為其是一個(gè)通配符。

這個(gè)轉(zhuǎn)義功能的普通應(yīng)用是比較簡(jiǎn)單的,只需要在元字符前面加上\即可。不過筆者這里還需要強(qiáng)調(diào)轉(zhuǎn)義字符的幾個(gè)特殊的應(yīng)用。這些應(yīng)用雖然比較特殊,普通用戶平時(shí)不怎么用的到。但是對(duì)于系統(tǒng)工程師來說,這些功能可能就特別的有用。

一是需要在文件名中插入空格。如在微軟操作系統(tǒng)中有一個(gè)My Documents文件夾,其中間就有一個(gè)空格。這個(gè)空格在Unix系統(tǒng)中也屬于一個(gè)特殊的原字符。如果在建立文件或者目錄時(shí),直接加入空格,則Unix操作系統(tǒng)會(huì)提示錯(cuò)誤信息。此時(shí)往往需要轉(zhuǎn)移字符的幫助。如使用命令mkdir My \ Documents,就可以建立中間帶有空格的目錄名。如要建立帶有空格的文件名,也是如此。不過需要注意是,如果在文件或者目錄中包含了元字符的話,那么在使用刪除命令或者目錄定位命令的時(shí)候,也需要采用轉(zhuǎn)移字符來定義這些特殊的元字符,否則的話可能會(huì)出現(xiàn)一些莫名其妙的問題。

二是利用轉(zhuǎn)義字符對(duì)命令進(jìn)行換行。在Unix操作系統(tǒng)中有些命令特別復(fù)雜,特別是那些部屬在Unix操作系統(tǒng)上的命令。如expdp是Oracle數(shù)據(jù)庫中的一個(gè)數(shù)據(jù)庫對(duì)象導(dǎo)出命令。雖然這個(gè)命令的功能很強(qiáng)大,但是可惜的是只有通過復(fù)雜的參數(shù)才能夠完成一些特定的功能。有時(shí)候一個(gè)命令需要好幾行才能夠?qū)懲?。雖然Unix操作系統(tǒng)提供了命令自動(dòng)換行的方法。但是這個(gè)自動(dòng)換行的功能比較薄弱,如不會(huì)在系統(tǒng)工程想要換行地方進(jìn)行換行。為此采用這個(gè)自動(dòng)換行的話,會(huì)造成代碼閱讀的困難。所以不少系統(tǒng)工程師還是希望能夠自己手工進(jìn)行分行,在某些關(guān)鍵參數(shù)后面進(jìn)行分行,以增加命令的可閱讀性。但是,如果直接使用回車鍵分行的話,系統(tǒng)是不認(rèn)可的。因?yàn)檫@個(gè)回車鍵系統(tǒng)認(rèn)為是一個(gè)執(zhí)行命令的鍵。即當(dāng)系統(tǒng)工程師點(diǎn)擊回車鍵的時(shí)候,系統(tǒng)會(huì)認(rèn)為用戶已經(jīng)將命令輸入完畢。鍵入回車鍵后系統(tǒng)就會(huì)自動(dòng)運(yùn)行這個(gè)命令。所以直接鍵入回車鍵往往不能夠完成命令分行的需求。此時(shí)就需要轉(zhuǎn)義字符的幫助。如現(xiàn)有一個(gè)命令比較長(zhǎng),工程師希望能夠?qū)⑵浞譃閮尚?,主要是將參?shù)-name后面的內(nèi)容另起一行。此時(shí)就可以在這個(gè)參數(shù)前面加入一個(gè)轉(zhuǎn)義字符\,然后再按回車鍵即可。由于有了這個(gè)轉(zhuǎn)義字符,系統(tǒng)就會(huì)取消回車鍵的換行作用。如此操作之后,系統(tǒng)會(huì)出現(xiàn)一個(gè)次級(jí)提示符,這個(gè)次級(jí)提示符表示命令還沒有結(jié)束,下一行繼續(xù)。這個(gè)功能對(duì)于系統(tǒng)工程師來說,可能是非常實(shí)用的。因?yàn)榇藭r(shí)系統(tǒng)工程師可以輕松的將一長(zhǎng)串的命令根據(jù)自己的需要來進(jìn)行分行,從而提高命令的可讀性。

另外需要注意的是,\這個(gè)轉(zhuǎn)義字符本身就是一個(gè)比較特殊的元字符。如果用戶想在命令或者文件名中使用這個(gè)\符號(hào)的話,也需要采用轉(zhuǎn)移字符。如用戶想利用echo或者printf命令顯示網(wǎng)址。在網(wǎng)址中就有很多\符號(hào),此時(shí)就需要采用轉(zhuǎn)義字符來讓系統(tǒng)將\符號(hào)當(dāng)作普通字符來對(duì)待。

二、利用引用來解決元字符的問題。

除了可以利用上面談到的引用功能來處理這些元字符以外,還可以采用引用這個(gè)功能來解決。簡(jiǎn)單的說,就是將一個(gè)命令參數(shù)放置在一對(duì)引號(hào)之內(nèi),則這個(gè)引號(hào)之內(nèi)內(nèi)容如果有元字符的話,則這些元字符將不起作用。那么既然轉(zhuǎn)義功能已經(jīng)可以解決元字符的問題,系統(tǒng)還提出了一個(gè)引用的解決方案,是否多次一舉呢?其實(shí)不然。當(dāng)一個(gè)命令行中含有多個(gè)元字符的時(shí)候,需要在每個(gè)元字符前面加一個(gè)轉(zhuǎn)移字符。為此此時(shí)如果采用轉(zhuǎn)義字符來解決這個(gè)元字符的問題時(shí),會(huì)非常的繁瑣。此時(shí)如果采用引用機(jī)制來解決元字符的問題時(shí),可能會(huì)更加的理想。如現(xiàn)在系統(tǒng)工程師希望能夠在屏幕上打出如下信息(這是一個(gè)共享文件的路徑):192.128.11.3\share\IT\software\pdf。如果采用轉(zhuǎn)移字符的話,該如何寫呢?由于這個(gè)輸出結(jié)果中有四個(gè)元字符(轉(zhuǎn)義字符\),為此管理員不得不用四個(gè)轉(zhuǎn)移字符來處理。即要寫成echo 192.128.11.3\\share\\IT\\software\\pdf。這顯然非常的麻煩。遇到這種情況時(shí),如果采用引用的話,顯然會(huì)更加的合適。如采用引用機(jī)制,只需要將這個(gè)命令寫為即可:

echo ‘192.128.11.3\share\IT\software\pdf’

將一大串命令采用單引號(hào)因起來。則系統(tǒng)會(huì)將命令行中的一些元字符都當(dāng)作普通字符來對(duì)待。即不需要為每一個(gè)元字符采用轉(zhuǎn)移字符。顯然這個(gè)引用解決方案要比采用轉(zhuǎn)義字符來解決要方便的多。

在采用引用機(jī)制來處理元字符時(shí),需要注意跟雙引號(hào)的區(qū)別。如現(xiàn)在有如下三個(gè)命令echo $JAVA_HOME、echo ‘$JAVA_HOME’、 “echo $JAVA_HOME”。其中$JAVA_HOME表示應(yīng)用程序Java的環(huán)境變量。此時(shí)如果系統(tǒng)工程師依次運(yùn)行上面這三個(gè)命令,會(huì)有什么結(jié)果呢?***個(gè)命令會(huì)正常顯示Java的環(huán)境變量;第二個(gè)命令直接顯示$JAVA_HOME,即已經(jīng)將元字符$當(dāng)作普通字符來對(duì)待。第三個(gè)命令的話仍然顯示Java的環(huán)境變量??梢婋p引號(hào)與單引號(hào)在引用機(jī)制上,還是有所不同的。那么他們到底有什么差異呢?總的來說,系統(tǒng)工程師需要注意如下內(nèi)容。單引號(hào)會(huì)保護(hù)里面所有的元字符,即遇到元字符時(shí)會(huì)告訴系統(tǒng)當(dāng)作普通字符來對(duì)待。但是如果采用了雙引號(hào),則系統(tǒng)會(huì)將單引號(hào)之間的內(nèi)容解釋為命令行。如會(huì)將$當(dāng)作環(huán)境變量的前綴等等。其實(shí)單引號(hào)與雙引號(hào)還有一種相互保護(hù)的作用。即雙引號(hào)保護(hù)其中的單引號(hào),而單引號(hào)保護(hù)其中的雙引號(hào)。因?yàn)闊o論是雙引號(hào)還是單引號(hào)本身就都是元字符,可以通過引用機(jī)制來進(jìn)行保護(hù)。不過在遇到單引號(hào)與雙引號(hào)(都當(dāng)作普通字符)都存在的情況下,筆者建議還是采用轉(zhuǎn)移字符來保護(hù)單引號(hào)或者雙引號(hào)為好。這可以避免誤解,也容易提高代碼的可讀性。同理,如果要將轉(zhuǎn)移字符\ 當(dāng)作普通字符來實(shí)用的話,那么***也是利用單引號(hào)來保護(hù)這個(gè)轉(zhuǎn)移字符,而不是利用轉(zhuǎn)移字符來保護(hù)轉(zhuǎn)移字符。這些雖然不影響實(shí)際的應(yīng)用,但是卻是提高代碼可讀性的有效手段。

從以上的分析中可以看出,雖然轉(zhuǎn)移字符與引用機(jī)制等等都可以將元字符當(dāng)作普通字符來對(duì)待。但是,兩者在實(shí)現(xiàn)的方法上還是有一定的差異。為此***能夠根據(jù)應(yīng)用場(chǎng)合的不同,在選擇合適的解決方案。一般來說,兩者的差異只是實(shí)現(xiàn)方法上的差異,在具體的功能上沒有區(qū)別。不過為了代碼的易讀性上考慮,選擇具體的解決方案是還需要慎重。不過總的來說,系統(tǒng)工程師必須同時(shí)掌握這兩種方法。然后根據(jù)不同的情況現(xiàn)在合適的解決方法。如果光掌握一種解決措施,可能不能夠解決所有跟元字符相關(guān)的問題。

感謝各位的閱讀!關(guān)于“Unix中如何利用轉(zhuǎn)義和引用來管理元字符”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

當(dāng)前題目:Unix中如何利用轉(zhuǎn)義和引用來管理元字符
文章出自:http://muchs.cn/article44/ijdohe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)品牌網(wǎng)站設(shè)計(jì)、網(wǎng)站設(shè)計(jì)公司云服務(wù)器、定制開發(fā)、Google

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)