溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

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

發(fā)布時間:2021-10-29 15:38:18 來源:億速云 閱讀:113 作者:小新 欄目:系統(tǒng)運維

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI