Bash

為什麼使用反斜杠轉義“$”字元時,echo 命令不需要“-e”選項

  • October 26, 2017

這是關於 bash builtin 的echo。根據 Bash 文件,該-e選項可以解釋反斜杠轉義。

如果我執行 echo "Total Amount \$500",我會看到預期的輸出 Total Amount $500。在這裡,我可以使用反斜杠來轉義“$”字元而不使用該 -e選項。但是要轉義新行或製表符,我需要 在命令中有這樣 -e的選項 - 。echo``echo -e "Total Amount: \n \$500"

字元串轉換有兩個步驟。

  1. 首先 bash 解析命令行echo -e "Total Amount: \n \$500"並確定它需要呼叫一個echo使用兩個參數呼叫的命令。第一個論點是-e。第二個參數是擴展雙引號文字的結果"Total Amount: \n \$500"。給定雙引號字元串¹的規則,\$變成$\n保持\n,因此傳遞給echo命令的第二個參數是Total Amount: \n $500
  2. echo 命令在-e模式下將一些以反斜杠開頭的序列替換為單個字元,例如,它替換\n為換行符。

請注意,“轉義”在您的問題中意味著兩件不同的事情。第一步,\$“轉義”$中的反斜杠表示$字元逃脫特殊處理並保持原樣。在第二步中,\n“轉義”正常處理中的反斜杠以對n導致換行符的 進行一些特殊處理。

¹後跟一個反斜杠`"$``成為第二個字元;反斜杠後跟其他任何內容。

²反斜杠後跟一些小寫字母成為控製字元;後跟數字的反斜杠成為具有該程式碼點的八進製字元;反斜杠後跟一個xuU和一些十六進制數字與十六進制數字相同;反斜杠後跟其他任何內容都只是第二個字元。

bash 手冊說明了echo-e開關一起使用時的以下內容:

如果給出 -e 選項,則啟用對以下反斜杠轉義字元的解釋。

它指定“以下反斜杠轉義字元”,然後列出它們:

\a
alert (bell)

\b
backspace

\c
suppress further output

\e
\E
escape

\f
form feed

\n
new line

\r
carriage return

\t
horizontal tab

\v
vertical tab

\\
backslash

\0nnn
the eight-bit character whose value is the octal value nnn (zero to three octal digits)

\xHH
the eight-bit character whose value is the hexadecimal value HH (one or two hex digits)

\uHHHH
the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value HHHH (one to four hex digits)

\UHHHHHHHH
the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value HHHHHHHH (one to eight hex digits)

這可能會令人困惑,因為它們實際上更像是一個而escape sequence不是( )。escape character``escape character``\

轉義序列

轉義序列是在字元或字元串文字中使用時不代表自身的字元序列,但被翻譯成可能難以或不可能直接表示的另一個字元或字元序列。

轉義字元

在計算和電信中,轉義字元是對字元序列中的後續字元呼叫替代解釋的字元。轉義字元是元字元的一種特殊情況。通常,判斷某事物是否為轉義字元取決於上下文。

-e選項與轉義字元幾乎沒有關係,但允許它與上述字元結合使用,sequences以便以特殊含義解釋它們。

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