' 和 " 有什麼區別?

' 和 " 有什麼區別?

我嘗試在 bash 腳本中建立一個文字檔案。

echo指令跨越多行並有一些雙引號“”。

#!/bin/bash 

echo "blabla bla bla bla "blabla" 
bla bla " bla bla bla"
and so on and so on

bla bla

blu bla  "bla bla bla "
bla bla" > /root/bin/bla

命令中有很多雙引號“”,echo這是不可取的。

我做到了

#!/bin/bash 

echo 'blabla bla bla bla "blabla" 
bla bla " bla bla bla"
and so on and so on

bla bla

blu bla  "bla bla bla "
bla bla' > /root/bin/bla

我想知道雙引號 " 和單引號 ' 之間是否有任何區別

哪一個的優先權比較高?只是因為它們在視覺上不同嗎?

答案1

來自bash手冊:

3.1.2.2 單引號

將字元括在單引號 (''') 中可保留引號內每個字元的字面值。單引號之間不能出現單引號,即使前面有反斜線也是如此。

3.1.2.3 雙引號

將字元括在雙引號 ('"') 中會保留引號內所有字元的字面值,但 '$'、'`'、'\' 和啟用歷史擴展時的 '!' 除外。字元'$' 和'`' 在雙引號內保留其特殊含義(請參閱Shell 擴展),僅當後跟以下字符之一時,反斜杠才保留其特殊含義:'$'、'`'、'"'、'。 \ ' 或換行符。在雙引號內,後面跟著這些字元之一的反斜線將被刪除。前面沒有特殊意義的反斜線字元保持不變。雙引號可以在雙引號內引用,方法是在雙引號前面加上反斜線。如果啟用,將執行歷史擴展,除非出現“!”出現在雙引號中的內容使用反斜線進行轉義。 '!' 前面的反斜杠沒有被刪除。特殊參數 '*' 和 '@' 在雙引號中時具有特殊意義(請參閱 Shell 參數擴充)。

以下是上述內容的一些實際演示:

  • 雙引號允許計算參數擴展,但單引號不允許:
$ var=foo
$ echo "$var"
foo
$ echo '$var'
$var
  • 雙引號允許計算反斜線轉義,但單引號不允許:
$ echo "\\"
\
$ echo '\\'
\\
  • 雙引號允許計算命令替換 ( $(, `),但單引號不允許:
$ echo "$(echo bar)"
bar
$ echo '$(echo bar)'
$(echo bar)

相關內容