Bash
為什麼引號被單引號包圍時保留在字元串變數中?
我需要在定義的字元串變數周圍保留雙引號
bash
,以便能夠將其傳遞給Scheme
程式語言的方言。我的問題是為什麼將雙引號放在另一組單引號中時會保留?為了說明這一點,我舉了一些我的例子bash command prompt
:$ str1=hey $ echo $str1 hey $ str2="hey" $ echo $str2 hey $ str3='hey' $ echo $str3 hey $ str4='"hey"' $ echo $str4 "hey" $ str5="'hey'" $ echo $str5 'hey' $
單引號字元串會將字元串保留為文字。雙引號字元串將保留帶有變數插值和擴展的字元串。這在 bash 手冊頁中進行了解釋 - 請參閱標題為 QUOTING 的部分
共有三種引用機制:轉義字元、單引號和雙引號。
不帶引號的反斜杠 () 是轉義字元。它保留後面下一個字元的字面值,但 {newline} 除外。如果出現 {newline} 對,並且反斜杠本身沒有被引用,則 {newline} 被視為續行(即,它從輸入流中刪除並被有效忽略)。
**將字元括在單引號中會保留引號內每個字元的字面值。**單引號之間不能出現單引號,即使前面有反斜杠。
用雙引號括起來的字元會保留引號內所有字元的字面值,除了 $ ,
, \, and, when history expansion is enabled, !. The characters $ 和
在雙引號中保留其特殊含義。 反斜杠僅在其後跟以下字元之一時才保留其特殊含義:$、`、"、\ 或 {newline}。雙引號可以在雙引號內通過在其前面加上反斜杠來引用。如果啟用,歷史擴展除非出現在雙引號中的 ! 使用反斜杠轉義,否則將執行。不會刪除 ! 之前的反斜杠。