如何使用 echo 列印“-e”?

如何使用 echo 列印“-e”?

我知道這echo -e不是一個普通的命令。我已經嘗試過了echo '-e'echo \-e但它們仍然不起作用。

答案1

最好的解決方法不是不使用echo,而是使用printf

printf '%s\n' -e

這適用於任意變數:

var=-e
printf '%s\n' "$var"

....意味著您不需要根據值將被echod 的知識在程式碼中的其他地方進行任何特殊的準備/修改。


順便,POSIX shell 指令規範echo承認它在實施時是不可移植的,並包含關於該主題的註釋:

除非省略 -n (作為第一個參數)和轉義序列,否則不可能在所有 POSIX 系統中可移植地使用 echo。

printf 實用程式可用於模擬 echo 實用程式的任何傳統行為,如下所示(假設 IFS 有其標準值或未設定):

POSIX.1-2008 本卷中歷史性的 System V echo 和 XSI 實現的要求相當於:

printf "%b\n" "$*"

BSD echo 相當於:

if [ "X$1" = "X-n" ]
then
    shift
    printf "%s" "$*"
else
    printf "%s\n" "$*"
fi

鼓勵新應用程式使用 printf 而不是 echo。

(強調是後加的)。


也就是說,在 GNU 系統上,還有另一個選擇:請求符合標準的行為。

$ POSIXLY_CORRECT=1 /bin/echo -e
-e

答案2

  • 帶換行符

    echo -en '-e\n'
    
  • 沒有換行符

    echo -e '-e\c'
    
  • 周圍有空格:

    echo '-e '
    echo ' -e'
    
  • 使用退格鍵(感謝 Joseph R.):

    echo -e ' \b-e'
    

    (它確實輸出 SPC BS - e LF,但是當發送到呈現為 BS 的終端時,-e會將遊標向左移回一列,導致-覆蓋 SPC)

bash的內建函數的行為echo可能取決於 bash 版本。它還取決於環境(POSIXLY_CORRECTSHELLOPTSBASHOPTS變數)、選項(posixxpg_echo)、建置選項和argv[0]shvs bash)。這裡測試了GNU bash 4.2.53(1),預設構建,預設選項,空環境,呼叫為bash。也適用於zsh 5.0.5.

答案3

對於GNUecho-e字元的 ASCII 代碼:

$ /bin/echo -e '\055'e
-e

055是八進位 ASCII 數字-(請參閱man ascii快速參考)。

答案4

用於-n避免換行:

$ echo -n - && echo e
-e

相關內容