Bash

為什麼命令 echo echo z 輸出 z?

  • January 5, 2021

該命令echo $(echo \\\z)來自書中 ,我不明白它為什麼會輸出

\和

我認為它應該輸出

\是 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 的任何保證。

實現可以輸出zor\zno such escape sequence: \zor 一個 NUL 字元…

然而在實踐中,我不知道任何可以理解\z為轉義序列的實現,所以我發現我嘗試過的所有實現都在\z<newline>那裡輸出。

如果您想要一種可移植且可靠的方式來輸出文本,請不要使用echoprintf而是使用.

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