Unix中利用轉義和引用來管理元字元(1)

來源:互聯網
上載者:User

在Unix作業系統中有一類特殊的字元,叫做元字元。他們在系統中表示特殊的含義。如*號與?號,作業系統認為這些元字元是萬用字元。如果在路經、檔案名稱或者命令參數中有這些元字元的話,就會引起作業系統的誤解。為此在系統中要採用一些方法,能夠讓作業系統將這些元字元當作一般字元來對待。在Unix系統中,就是採用轉義和引用這兩種方式來處理。系統工程師需要明白的是,這兩種解決方案的差異。並在特定的情況下,採用合適的解決方式。

一、轉義功能的應用。

其實轉義機制不僅僅在Unix作業系統上有,在其他的程式設計語言中也有類似的處理機制。如果各位讀者有程式開發經驗的話,那麼可能更加容易瞭解這個轉義功能。簡單的說,轉義功能就是指在一些具有特殊含義的元字元前面加上一個逸出字元\,目的是告訴作業系統這是一個普通的字元,取消元字元的特殊意義。如*本來代表萬用字元,如ls *則表示所有的檔案與目錄。而\*就是將*號當作一個普通的字元來對待,系統不會再認為其是一個萬用字元。

這個轉義功能的普通應用是比較簡單的,只需要在元字元前面加上\即可。不過筆者這裡還需要強調逸出字元的幾個特殊的應用。這些應用雖然比較特殊,普通使用者平時不怎麼用的到。但是對於系統工程師來說,這些功能可能就特別的有用。

一是需要在檔案名稱中插入空格。如在微軟作業系統中有一個My Documents檔案夾,其中間就有一個空格。這個空格在Unix系統中也屬於一個特殊的原字元。如果在建立檔案或者目錄時,直接加入空格,則Unix作業系統會提示錯誤資訊。此時往往需要轉移字元的協助。如使用命令mkdir My \ Documents,就可以建立中間帶有空格的目錄名。如要建立帶有空格的檔案名稱,也是如此。不過需要注意是,如果在檔案或者目錄中包含了元字元的話,那麼在使用刪除命令或者目錄定位命令的時候,也需要採用轉移字元來定義這些特殊的元字元,否則的話可能會出現一些莫名其妙的問題。

二是利用逸出字元對命令進行換行。在Unix作業系統中有些命令特別複雜,特別是那些部屬在Unix作業系統上的命令。如expdp是Oracle資料庫中的一個資料庫物件匯出命令。雖然這個命令的功能很強大,但是可惜的是只有通過複雜的參數才能夠完成一些特定的功能。有時候一個命令需要好幾行才能夠寫完。雖然Unix作業系統提供了命令自動換行的方法。但是這個自動換行的功能比較薄弱,如不會在系統工程想要換行地方進行換行。為此採用這個自動換行的話,會造成代碼閱讀的困難。所以不少系統工程師還是希望能夠自己手工進行分行,在某些關鍵參數後面進行分行,以增加命令的可閱讀性。但是,如果直接使用斷行符號鍵分行的話,系統是不認可的。因為這個斷行符號鍵系統認為是一個執行命令的鍵。即當系統工程師點擊斷行符號鍵的時候,系統會認為使用者已經將命令輸入完畢。鍵入斷行符號鍵後系統就會自動運行這個命令。所以直接鍵入斷行符號鍵往往不能夠完成命令分行的需求。此時就需要逸出字元的協助。如現有一個命令比較長,工程師希望能夠將其分為兩行,主要是將參數-name後面的內容另起一行。此時就可以在這個參數前面加入一個逸出字元\,然後再按斷行符號鍵即可。由於有了這個逸出字元,系統就會取消斷行符號鍵的換行作用。如此操作之後,系統會出現一個次級提示符,這個次級提示符表示命令還沒有結束,下一行繼續。這個功能對於系統工程師來說,可能是非常實用的。因為此時系統工程師可以輕鬆的將一長串的命令根據自己的需要來進行分行,從而提高命令的可讀性。

另外需要注意的是,\這個逸出字元本身就是一個比較特殊的元字元。如果使用者想在命令或者檔案名稱中使用這個\符號的話,也需要採用轉移字元。如使用者想利用echo或者printf命令顯示網址。在網址中就有很多\符號,此時就需要採用逸出字元來讓系統將\符號當作一般字元來對待。

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

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

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

將一大串命令採用單引號因起來。則系統會將命令列中的一些元字元都當作一般字元來對待。即不需要為每一個元字元採用轉移字元。顯然這個引用解決方案要比採用逸出字元來解決要方便的多。



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.