單引号 ( ' ' )
如果我們想查找的是susan goldberg,不能直接使用grep susan goldberg phonebook指令,grep會把goldberg和phonebook當作需要搜尋的檔案
$ grep 'susan gold' phonebook
susan goldberg 403-212-4921
當shell碰到第一個單引号時,它忽略掉其後直到右引号的所有特殊字元
如果想列印單引号,可以采用如下方式
$ awk 'begin{print "'\''"} '
'
或者用047代替單引号
$ awk '{print "\047"}'
雙引号 ( " " )
雙引号作用與單引号類似,差別在于它沒有那麼嚴格。單引号告訴shell忽略所有特殊字元,而雙引号隻要求忽略大多數,具體說,括在雙引号中的三種特殊字元不被忽略:$,\,` ,即雙引号會解釋字元串的特别意思,而單引号直接使用字元串.如果使用雙引号将字元串賦給變量并回報它,實際上與直接回報變量并無差别。如果要查詢包含空格的字元串,經常會用到雙引号。
$ x=*
$ echo $x
hello.sh menus.sh misc.sh phonebook tshift.sh
$ echo '$x'
$x
$ echo "$x"
*
這個例子可以看出無引号、單引号和雙引号之間的差別。在最後一種情況中,雙引号告訴shell在引号内照樣進行變量名替換,是以shell把$x替換為*,因為雙引号中不做檔案名替換,是以就把*作為要顯示的值傳遞給echo。
對于第一種情況需要進一步說明,shell在給變量指派時不進行檔案名替換(這從第三種情況中也能看出來),各步驟發生的精确次序如下:
shell掃描指令行,把x的值設為星号*;
shell再次掃描指令行,碰到星号*,把它替換成目前目錄下的檔案清單;
shell啟動執行echo指令,把檔案清單作為參數傳遞給echo.
這個指派的先後次序非常重要:shell先作變量替換,然後作檔案名替換,最後把這行處理為參數
反引号(``)
指令替換是指shell能夠将一個指令的标準輸出插在一個指令行中任何位置。shell中有兩種方法作指令替換:把shell指令用反引号或者$(...)結構括起來,其中,$(...)格式受到posix标準支援,也利于嵌套。
$ 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.
反斜杠 backslash-escaped( \ )
反斜杠一般用作轉義字元,或稱逃脫字元,linux如果echo要讓轉義字元發生作用,就要使用-e選項,且轉義字元要使用雙引号
echo -e "\n"
反斜杠的另一種作用,就是當反斜杠用于一行的最後一個字元時,shell把行尾的反斜杠作為續行,這種結構在分幾行輸入長指令時經常使用
參考至:http://www.cnblogs.com/rootq/articles/1417138.html
http://blog.chinaunix.net/uid-639516-id-2692529.html
本文原創,轉載請注明出處、作者
如有錯誤,歡迎指正
作者:czmmiao 文章出處:http://czmmiao.iteye.com/blog/1887660