Bash
為什麼使用引號時顯示單個反斜杠
我一直認為 bash 在不帶雙引號或不帶雙引號的情況下對待反斜杠是一樣的,但我錯了:
[user@linux ~]$ echo "foo \ " foo \ [user@linux ~]$ echo foo \ # Space after \ foo
所以我認為在使用雙引號時總是會列印反斜杠,但是:
[user@linux ~]$ echo "foo \" " foo " [user@linux ~]$ echo "foo \\ " foo \
為什麼顯示第一行程式碼中的反斜杠?
反斜杠僅在後跟以下字元之一時才保留其特殊含義:’
$
’、’ ```’、’"
’、’\
’ 或newline
。在雙引號內,刪除後面跟有這些字元之一的反斜杠。沒有特殊含義的字元前面的反斜杠保持不變。雙引號可以用反斜杠在雙引號中引用。如果啟用,將執行歷史擴展,除非!
出現在雙引號中的 ’ ’ 使用反斜杠進行轉義。’ ’ 前面的反斜杠!
不會被刪除。因此
\
,雙引號與\
單引號和\
外引號的處理方式不同。它按字面處理,除非它能夠導致按字面處理的字元,否則在雙引號中可能具有特殊含義。請注意,像
\'
,\?
和\*
之類的序列按字面意思處理,並且不會刪除反斜杠,因為'
,?
和*
用雙引號括起來時已經沒有特殊含義。