shell中單引號和雙引號的區別 經典解釋

2021-09-12 19:11:48 字數 1513 閱讀 8322

hard quote:單引號,關閉所有的meta(什麼是meta,自己查吧)

soft quote:雙引號,關閉大部分的meta,但是某些保留,括在雙引號中的三種特殊字元不被忽略:$,\,`

escape:反斜槓,它只會關閉緊跟escape之後的字元。

雙引號作用與單引號類似,區別在於它沒有那麼嚴格。單引號告訴shell忽略所有特殊字元,而雙引號只要求忽略大多數,具體說,括在雙引號中的三種特殊字元不被忽略:$,,` ,即雙引號會解釋字串的特別意思,而單引號直接使用字串.

反斜槓一般用作轉義字元,或稱逃脫字元,linux如果echo要讓轉義字元發生作用,就要使用-e選項,且轉義字元要使用雙引號

echo -e 「n」

反斜槓的另一種作用,就是當反斜槓用於一行的最後乙個字元時,shell把行尾的反斜槓作為續行,這種結構在分幾行輸入長命令時經常使用。

btw反引號和()的

功能是命

令替換,

將反引號

或()的功能是命令替換,將反引號或

()的功能是

命令替換

,將反引

號或()中的字串做為命令來執行,我們在用shell程式設計時經常用的到 將系統命令的執行結果賦給乙個變數

但反引號內不能再引用反引號,而$()中可以引用反引號

參考cu上經典的十三問,hard quote關閉shell的meta,而soft quote關閉大部分的shell meta,但是$例外,對於bash的來說,命令的解釋是從左到右的,首先遇到hard quote和soft quote,所作的解釋是不一樣,看這個例子:

$ a=1

$ echo "katex parse error: expected 'eof', got '#' at position 21: … #̲被bash解釋到

$ echo 「』$a』」

『1』 #hard quote被關閉

$ echo 『$a』

katex parse error: expected 'eof', got '#' at position 18: … #̲被hard quote關閉

$ echo '「a"′

"a"' "

a"′"

a」 #所有都被關閉了

如果能夠理解上面的了,那基本知道怎麼用單引號和雙引號了。

而對於awk、ed等等命令,需要區分shell meta和command meta

對於awk來說,它的:是將其內的命令置於non-named function 中執行,awk用來區分命令段,例如begin,end等等。舉個例子:

$ awk b.txt

awk: line 2: missing } near end of file

看看報錯,如果直接使用,那麼我們知道沒有被shell關閉,也就是說它看成shell的meta了,當然報錯了,所以要關閉,同時shell中的也關閉

,也就是

也關閉,也就是

也關閉,也就

是所作的一切是為了讓awk或者自己的meta,請切記注意print後的空格,也要關閉,要不又被shell解釋了。

shell中單引號 雙引號 反引號

一 單引號和雙引號 首先,單引號和雙引號,都是為了解決中間有空格的問題。因為空格在linux中時作為乙個很典型的分隔符,比如string1 this is astring,這樣執行就會報錯。為了避免這個問題,因此就產生了單引號和雙引號。他們的區別在於,單引號將剝奪其中的所有字元的特殊含義,而雙引號中...

shell中的單引號 雙引號和反引號

單引號 所有轉移符全部關閉,完整的反應括號中的內容 雙引號 部分轉義符關閉,但某些則保留 如 反引號 反引號內作為乙個系統命令並執行 1 反引號位 位於鍵盤的tab鍵的上方 1鍵的左方。注意與單引號 位於 enter鍵的左方的區別。在linux中起著命令替換的作用。命令替換是指 shell能夠將乙個...

shell指令碼中單引號和雙引號

shell指令碼中的單引號和雙引號一樣都是字串的界定符,而不是字元的界定符。單引號用於保持引號內所有字元的字面值,即使引號內的 和回車也不例外,但是字串中不能出現單引號。注意是所有,只是單引號本身不能夠出現在其中 雙引號用於保持引號內所有字元的字面值 回車也不例外 但以下情況除外 反引號位 位於鍵盤...