帶有 -e 選項的 Unix echo 命令

帶有 -e 選項的 Unix echo 命令

我正在閱讀有關echoUNIX 中的命令的信息,我發現了-e用於啟用反斜杠轉義解釋的選項,問題是這些反斜杠轉義序列之一是\\ ,但是當我使用這兩個命令時:

echo "hello\\\world"

echo -e "hello\\\world"

我得到相同的輸出: hello\\world ,那麼有什麼區別呢? |

答案1

預設是擴展轉義序列,-e 選項是非標準的。

如果您的 echo 實作在 echo 輸出中不包含 -e,則它是不合規的。

這裡的問題是,有些實作只遵循最低的 POSIX 要求,而忽略了一個事實,即允許稱為UNIX相容的平台需要實現對 POSIXXSI增強功能的支援。

順便一提:MacOS X 和 Solaris 上的 bash 被編譯為始終擴展轉義序列。預設編譯變體中的 Bash 不符合 POSIX XSI。

POSIX 相容 shell(如 ksh93、bosh 或 dash)預設根據需要擴展轉義序列。

如果您想檢查行為,那麼測試字串不是一個好主意。更好的測試是:

echo '\tfoo'

並檢查foo輸出中是否以製表符開頭。

您可能遇到問題的原因是您使用了 shell foo\\bar,而 shell 已經處理雙引號字串中的反斜線。如果您想檢查echo行為,則需要使用單引號字串作為參數。

相關內容