Shell特殊字元

來源:互聯網
上載者:User
轉貼:
http://blog.chinaunix.net/u1/43550/showart_372639.html

1.一般萬用字元

  萬用字元用於模式比對,如檔案名稱匹配、路徑名搜尋、字串尋找等。常用的萬用字元有四種:

* 匹配任一字元0次或多次出現。例如,f*可以匹配以f 打頭的任一字元串。但應注意,檔案名稱前面的圓點( . ) 和路徑名中的斜線( / )必須顯式匹配。

? 匹配任意一個字元,例如,f ?匹配f1、fa、fb等,但不能匹配 f 、fabc、 f12等。

[ ] 其中有一個字元組,它匹配該字元組所限定的任何一個字元。該字元組可以由直接給出的字元組成,也可以由表示限定範圍的起始字元、終止字元及中間一個連字號(-)組成。例如,f[a-d]與f[abcd]作用相同。

! 表示不在一對方括弧中所列出的字元。例如,f[!1—9].c 表示以f打頭,後面一個字元不是數字1至9的.c檔案名稱,它匹配fa.c、fb.c、fm.c等。

在一個Regex中,可以同時使用“*”和“?”。

2.模式運算式

  模式運算式是那些包含一個或多個萬用字元的字。bash除支援一般萬用字元外,還提供了特有的擴充模式比對運算式,其形式和含義如下:

(1)*(模式表) 匹配給定模式表中“模式”的0次或多次出現,各模式之間以“|”分開。例如,file*(.c|.o)將匹配檔案file、file.c、file.o、file.c.c、file.0.0、file.c.o、file.o.c等,但不匹配file.h或file.s等。

(2)+(模式表) 匹配給定模式表中“模式”的1次或多次出現,各模式之間以“|”分開。例如,file+(.c | .o)匹配檔案file.c、file.o、file.c.o、file.c.c等,但不匹配file。

(3)?(模式表) 匹配模式表中任何一種“模式”的0次或1次出現,各模式之間以“|”分開。例如,file?(.c|.o)只匹配file、file.c和file.0,它不匹配多個模式或模式的重複出現,即不匹配file. c. c、file. c. 0等。

(4)@(模式表) 僅匹配模式表中給定“模式”的一次出現,各模式之間以“|”分開。例如,file@(.c|.0)匹配file.c和file.0,但不匹配file、file.c.c、file.c.o等。

(5)!(模式表) 除給定模式表中的一個“模式”之外,它可以匹配其它任何東西。

可以看出,模式運算式的定義是遞迴的,每個運算式中都可以包含一個或多個模式。例如file*( .[cho]|.sh)是合法的模式運算式。但在使用時應注意,由於帶“*”和“+”的運算式可以匹配給定模式的組合,若利用此種運算式去刪除檔案就存在危險,有可能誤將系統設定檔刪除。因此,必須小心使用。

3.引號

在Shell中引號分為三種:單引號、雙引號和倒引號。

(1)雙引號

由雙引號括起來的字元,除$、倒引號(`)和反斜線(")仍保留其特殊功能外,其餘字元均作為一般字元對待。“$”表示變數替換,即用其後指定的變數的值來代替$和變數;倒引號表示命令替換;僅當“"”後面的字元是下述字元之一時,“"”才是逸出字元,這些字元是:“$”、“`”、“"”、“"”或分行符號。逸出字元告訴Shell不要對其後面的那個字元進行特殊處理,只是當作一般字元。例如:

$ echo "My current dir is `pwd` and logname is $LOGNAME"

My current dir is /home/abc and logname is abc

(2)單引號

由單引號括起來的字元都作為一般字元出現。例如,

$ echo 'The time is ` date ` , the file is $HOME/abc '

The time is ` date ` , the file is $HOME/abc

(3)倒引號

倒引號括起來的字串被shell解釋為命令列,在執行時,Shell會先執行該命令列,並以它的標準輸出結果取代整個倒引號部分。在前面樣本中已經見過。例如,

$ echo current directory is ` pwd `

current directory is /home/abc

 

4.注釋

Shell程式中以“#”開頭的本文行表示注釋。例如:

#!/bin/bash

# If no arguments, then listing the current directory.

# Otherwise, listing each subdirectory.

if test $# = 0

then ls ·

else

for i

do

ls -l $i | grep '^d'

done

fi

上面程式由if語句構成,其中else部分是for迴圈語句。其功能是檢測位置參數個數,若等於0,則列出目前的目錄本身;否則,對於每個位置參數顯示其所包含的子目錄。

上面代碼中,第一行#!/bin/bash表示下面的指令碼是用bash編寫的,必須調用bash程式對它解釋執行。後面兩行以“ # ”開頭,表示這是注釋行。注釋行可用來說明程式的功能、結構、演算法和變數的作用等,增加程式的可讀性。在執行時Shell將忽略注釋行。


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.