Bash

為什麼使用引號時顯示單個反斜杠

  • March 8, 2019

我一直認為 bash 在不帶雙引號或不帶雙引號的情況下對待反斜杠是一樣的,但我錯了:

[user@linux ~]$ echo "foo \ "
foo \
[user@linux ~]$ echo foo \ # Space after \
foo

所以我認為在使用雙引號時總是會列印反斜杠,但是:

[user@linux ~]$ echo "foo \" "
foo "
[user@linux ~]$ echo "foo \\ "
foo \

為什麼顯示第一行程式碼中的反斜杠?

GNU Bash 手冊的第3.1.2.3 節雙引號說:

反斜杠僅在後跟以下字元之一時才保留其特殊含義:’ $’、’ ```’、’ "’、’ \’ 或 newline。在雙引號內,刪除後面跟有這些字元之一的反斜杠。沒有特殊含義的字元前面的反斜杠保持不變。雙引號可以用反斜杠在雙引號中引用。如果啟用,將執行歷史擴展,除非!出現在雙引號中的 ’ ’ 使用反斜杠進行轉義。’ ’ 前面的反斜杠!不會被刪除。

因此\,雙引號與\單引號和\外引號的處理方式不同。它按字面處理,除非它能夠導致按字面處理的字元,否則在雙引號中可能具有特殊含義。

請注意,像\',\?\*之類的序列按字面意思處理,並且不會刪除反斜杠,因為',?*用雙引號括起來時已經沒有特殊含義。

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