Bash

為什麼引號被單引號包圍時保留在字元串變數中?

  • February 6, 2015

我需要在定義的字元串變數周圍保留雙引號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}。雙引號可以在雙引號內通過在其前面加上反斜杠來引用。如果啟用,歷史擴展除非出現在雙引號中的 ! 使用反斜杠轉義,否則將執行。不會刪除 ! 之前的反斜杠。

引用自:https://unix.stackexchange.com/questions/183075