1. 單引號(hào) ( '' ) # grep Susan phonebook Susan Goldberg 403-212-4921 Susan Topple 212-234-2343 如果我們想查找的是Susan Goldberg,不能直接使用grep Susan Goldberg phonebook命令,grep會(huì)把Goldberg和phonebook當(dāng)作需要搜索的文件 # grep 'Susan Gold' phonebook Susan Goldberg 403-212-4921 當(dāng)shell碰到第一個(gè)單引號(hào)時(shí),它忽略掉其后直到右引號(hào)的所有特殊字符 2. 雙引號(hào) ( " " ) 雙引號(hào)作用與單引號(hào)類似,區(qū)別在于它沒(méi)有那么嚴(yán)格。單引號(hào)告訴shell忽略所有特殊字符,而雙引號(hào)只要求忽略大多數(shù),具體說(shuō),括在雙引號(hào)中的三種特殊字符不被忽略:$,\,` ,即雙引號(hào)會(huì)解釋字符串的特別意思,而單引號(hào)直接使用字符串.如果使用雙引號(hào)將字符串賦給變量并反饋它,實(shí)際上與直接反饋?zhàn)兞坎o(wú)差別。如果要查詢包含空格的字符串,經(jīng)常會(huì)用到雙引號(hào)。 # x=* # echo $x hello.sh menus.sh misc.sh phonebook tshift.sh # echo '$x' $x # echo "$x" * 這個(gè)例子可以看出無(wú)引號(hào)、單引號(hào)和雙引號(hào)之間的區(qū)別。在最后一種情況中,雙引號(hào)告訴shell在引號(hào)內(nèi)照樣進(jìn)行變量名替換,所以shell把$x替換為*,因?yàn)殡p引號(hào)中不做文件名替換,所以就把*作為要顯示的值傳遞給echo。 對(duì)于第一種情況需要進(jìn)一步說(shuō)明,shell在給變量賦值時(shí)不進(jìn)行文件名替換(這從第三種情況中也能看出來(lái)),各步驟發(fā)生的精確次序如下: shell掃描命令行,把x的值設(shè)為星號(hào)*; shell再次掃描命令行,碰到星號(hào)*,把它替換成當(dāng)前目錄下的文件清單; shell啟動(dòng)執(zhí)行echo命令,把文件清單作為參數(shù)傳遞給echo. 這個(gè)賦值的先后次序非常重要:shell先作變量替換,然后作文件名替換,最后把這行處理為參數(shù) 3. 反引號(hào)(``) 命令替換是指shell能夠?qū)⒁粋€(gè)命令的標(biāo)準(zhǔn)輸出插在一個(gè)命令行中任何位置。shell中有兩種方法作命令替換:把shell命令用反引號(hào)或者$(...)結(jié)構(gòu)括起來(lái),其中,$(...)格式受到POSIX標(biāo)準(zhǔn)支持,也利于嵌套。 # echo The date and time is `date` The date and time is 三 6月 15 06:10:35 CST 2005 # echo Your current working directory is $(pwd) Your current working directory is /home/howard/script 4. 反斜杠 backslash-escaped( \ ) 反斜杠一般用作轉(zhuǎn)義字符,或稱逃脫字符,linux如果echo要讓轉(zhuǎn)義字符發(fā)生作用,就要使用-e選項(xiàng),且轉(zhuǎn)義字符要使用雙引號(hào) echo -e "\n" 反斜杠的另一種作用,就是當(dāng)反斜杠用于一行的最后一個(gè)字符時(shí),shell把行尾的反斜杠作為續(xù)行,這種結(jié)構(gòu)在分幾行輸入長(zhǎng)命令時(shí)經(jīng)常使用。 |
|