Bash為什麼命令 echo
為什麼命令 echo echo z
輸出 z?
該命令
echo $(echo \\\z)
來自書中 ,我不明白它為什麼會輸出\和
我認為它應該輸出
和
\
是 shell 的引用運算符。當在其他類型的引號之外時,\x
就像'x'
(x
換行符除外)。所以:
echo \\\x
就好像:
echo '\''x'
或者
echo '\x'
So
echo
使用兩個參數呼叫,一個包含echo
(其名稱),另一個包含\x
.根據 POSIX,
echo
當其任何操作數(命令名稱以外的參數)包含反斜杠或其第一個操作數時的行為-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
或no such escape sequence: \z
or 一個 NUL 字元…然而在實踐中,我不知道任何可以理解
\z
為轉義序列的實現,所以我發現我嘗試過的所有實現都在\z<newline>
那裡輸出。如果您想要一種可移植且可靠的方式來輸出文本,請不要使用
echo
,printf
而是使用.