
答案1
\
是 shell 的引用運算子。當在其他類型的引號之外時,\x
就像'x'
(除非x
是換行符號)。
所以:
echo \\\x
就好像:
echo '\''x'
或者
echo '\x'
Soecho
使用兩個參數調用,一個包含echo
(其名稱),另一個包含\x
.
根據 POSIXecho
,當其任何操作數(命令名稱以外的參數)包含反斜線或其第一個操作數時的行為是-n
未指定的。您會發現,即使在此之外,行為也會有所不同。
根據 UNIX 規範(在上面的連結中應用 XSI), 的行為echo '\z'
也未指定,因為\z
它不是標準轉義序列之一。
但是,使用 UNIX 相容的echo
,例如echo
的內建函數bash -o posix -O xpg_echo
,您可以保證:
echo '\\z'
與...一樣:
echo \\\\z
或者:
echo \\\\\z
將輸出\z<newline>
.
除此之外,您不會得到 POSIX 的任何保證。
實作可以輸出z
or \z
or no such escape sequence: \z
or NUL 字元...
然而在實踐中,我不知道有任何實作可以理解\z
為轉義序列,所以我發現我嘗試的所有實作都\z<newline>
在那裡輸出。
如果您想要一種便攜且可靠的方式來輸出文本,不使用echo
,printf
改用。
答案2
將語句 echo 分成幾部分
\ 是 bash 辨識為轉義的變數
因此 \ 正在轉義字元“\”,因此列印 \
\z 轉義字元“z”,因此印出 z
綜合起來,我們有 \z