最近在用awk拼寫一段sql語句時,遇到了 單引號不能輸出的 問題 。
實在讓人很困惑 !
awk中如何輸出單引號 如何在awk中列印輸出單引號呢 shell如何處理單引號呢 ?
也就是shell中對單引號的處理問題
解決辦法
awk ''
把轉義的單引號',用兩個單引號括起來,使其不執行
原因是 :括在雙引號中的三種特殊字元不被忽略:$,\,` ,即雙引號會解釋字串的特別意思,而單引號直接使用字串輸出.
那麼shell如何處理特殊字元的呢
1. 單引號 ( ' ' )
如果我們想查詢的是susan goldberg,不能直接使用grep susan goldberg phonebook命令,grep會把goldberg和phonebook當作需要搜尋的檔案
howard@0[script]$ grep 'susan gold' phonebook
susan goldberg 403-212-4921
當shell碰到第乙個單引號時,它忽略掉其後直到右引號的所有特殊字元
2. 雙引號 ( " " )
雙引號作用與單引號類似,區別在於它沒有那麼嚴格。單引號告訴shell忽略所有特殊字元,而雙引號只要求忽略大多數,具體說,括在雙引號中的三種特殊字元不被忽略:$,\,` ,即雙引號會解釋字串的特別意思,而單引號直接使用字串.如果使用雙引號將字串賦給變數並反饋它,實際上與直接反饋變數並無差別。如果要查詢包含空格的字串,經常會用到雙引號。
howard@0[script]$ x=*
howard@0[script]$ echo $x
hello.sh menus.sh misc.sh phonebook tshift.sh
howard@0[script]$ echo '$x'
$xhoward@0[script]$ echo "$x"
*這個例子可以看出無引號、單引號和雙引號之間的區別。在最後一種情況中,雙引號告訴shell在引號內照樣進行變數名替換,所以shell把$x替換為*,因為雙引號中不做檔名替換,所以就把*作為要顯示的值傳遞給echo。
對於第一種情況需要進一步說明,shell在給變數賦值時不進行檔名替換(這從第三種情況中也能看出來),各步驟發生的精確次序如下:
shell掃瞄命令列,把x的值設為星號*;
shell再次掃瞄命令列,碰到星號*,把它替換成當前目錄下的檔案清單;
shell啟動執行echo命令,把檔案清單作為引數傳遞給echo.
這個賦值的先後次序非常重要:shell先作變數替換,然後作檔名替換,最後把這行處理為引數
3. 反引號(``)
命令替換是指shell能夠將乙個命令的標準輸出插在乙個命令列中任何位置。shell中有兩種方法作命令替換:把shell命令用反引號或者$(...)結構括起來,其中,$(...)格式受到posix標準支援,也利於巢狀。
howard@0[script]$ echo the date and time is `date`
the date and time is 三 6月 15 06:10:35 cst 2005
howard@0[script]$ echo your current working directory is $(pwd)
your current working directory is /home/howard/script.
4. 反斜槓 backslash-escaped( \ )
反斜槓一般用作轉義字元,或稱逃脫字元,linux如果echo要讓轉義字元發生作用,就要使用-e選項,且轉義字元要使用雙引號
echo -e "\n"
反斜槓的另一種作用,就是當反斜槓用於一行的最後乙個字元時,shell把行尾的反斜槓作為續行,這種結構在分幾行輸入長命令時經常使用。
awk中如何輸出單引號
最近在用awk拼寫一段sql語句時,遇到了 單引號不能輸出的 問題 實在讓人很困惑 awk中如何輸出單引號 如何在awk中列印輸出單引號呢 shell如何處理單引號呢 也就是shell中對單引號的處理問題 解決辦法 awk 把轉義的單引號 用兩個單引號括起來,使其不執行 原因是 括在雙引號中的三種特...
awk中列印單引號
碰巧要用awk生成一段sql指令碼,所以涉及到在語句中列印出單引號的問題.eg1 當為字串時 echo aaa awk eg2 當為一字段時 echo tom awk eg3 當為shell中變數時 key tom echo aaa awk 說明 把轉義的單引號要用單引號括起來如 awk eg1 單...
mysql中反單引號 單引號 雙引號的區別
反引號,一般在esc鍵的下方。它是為了區分mysql的保留字與普通字元而引入的符號。舉個例子 select select from test where select 字段值 在test表中,有個select欄位,如果不用反引號,mysql將把select視為保留字而導致出錯,所以,有mysql保留...