我正在閱讀有關echo
UNIX 中的命令的信息,我發現了-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
行為,則需要使用單引號字串作為參數。