我了解了,謝謝。
不過很想知道各位大大平常使用 RE 時都習慣用單引號還雙引號還是都不用?
像我平常都用雙引號居多。
先建立一個小觀念
UNIX 上的 shell 本身都是一個直譯器也就是說, 你在 shell command line 輸入的任何字, shell 都會先幫你翻譯處理
什麼是直譯器, 簡單說就是一個即時翻譯的程式語言!!
所以當你使用 UNIX command line 一段時間之後, 你就可以試著去思考
你所輸入的command, 會被 UNIX shell 翻譯成什麼樣子
一般初學者最常搞混的就是 $$ dollar sign 嚕...
如果各位手邊有UNIX shell 的話, 可以試著輸入
echo $HOME <ENTER>
和
echo '$HOME' <ENTER>
然後再輸入
echo "$HOME" <ENTER>
有沒有發現, 第一個和第三個的結果是一樣的...
如果不一樣的話, 那請告訴我您的 shell version, 因為我脫離 UNIX 太久, 退流行嚕...
所以最簡單的辨別 " double quote 和 ' quote 用途差異的部份, 就在於
"" double quote 所包含的字串同樣會被 shell 這個編譯器給翻譯掉了
'' quote 所包含的字串則不會...所以當你輸入
grep '$400' test.txt
grep 這個UNIX 命令執行的時候, grep 所看到的第一個命令列參數是 $400
若你輸入
grep "$400" test.txt
則 shell 看到 double quote 裡面包了個 $ 錢字號, shell 會先幫你翻譯
找看看有沒有變數叫做 400 的, 如果有的話, "$400" 就會被翻譯成那個變數值內容, 如果沒有定義 400 這個變數的話, shell 幫你翻譯的結果就變成空字串..也就是
grep 真的在執行的時候看到的第一個參數已經經過 shell 翻譯過嚕~~
該變數是有定義的變數 grep 看到的就是變數內容
該變數未經定義, grep 看到的就是空字串
如果上面的部份, 各位看了沒問題的話...那我們再來看
"" 作啥用的..
請各位先問自己一個小問題..
UNIX 的 shell 上都會有所謂的 command line argument
那每一個 command line argument 的 seperater (她的分隔依據)是啥?
如果您用的是 ksh, bash, csh, tcsh , etc...
那應該會和小弟的心得是相同的...
因為她就是這個程式語言編譯器用來識別變數和非變數的依據...
她的分隔符號是 空白, 也就是在 command line 所輸入的字串裡面
每一個 command line argument 都是被空白格開的...
如果大家對上面這一小段話沒啥太大的意見的話,那就接著往下看嚕
就
因為UNIX 的習慣上, 都是以空白當做命令列參數的區隔的...
所以當你需要在同一個命令列參數中包含一個或多個空白的時候..
你就必須用到 "" double quote 了所以如果你趕時間, 不想記那一堆廢話的話...
簡單說, 結論就是
1.當你不想你的字串被 shell 這個翻譯器翻譯的話, 就請用 'OOXX' quoteexample :
echo '$400 dollar'
grep '$400 dollar' test.txt
2.當你的一個命令列參數 command line argument 必須包含空白時, 就請用 "OOXX" double quoteexample :
比如說我要在文字檔中搜尋同樣金額但是不同幣值的字串
我就可以設定一個變數, 叫做 volumn
然後, 我在搜尋的時候, 在指定我要搜尋的是美金, 或新台幣嚕
volumn=300;export volumn
搜尋美金 : grep "$volumn US dollar" test.txt
搜尋新台幣 : grep "$volumn NT" test.txt
--
最後補充一下, 基本上 quote 和 double quote 應該不算是 RE 的範疇的東西喔
因為它應該是屬於 shell 解譯的觀念