
我嘗試在 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)