
我知道這echo -e
不是一個普通的命令。我已經嘗試過了echo '-e'
,echo \-e
但它們仍然不起作用。
答案1
最好的解決方法不是不使用echo
,而是使用printf
。
printf '%s\n' -e
這適用於任意變數:
var=-e
printf '%s\n' "$var"
....意味著您不需要根據值將被echo
d 的知識在程式碼中的其他地方進行任何特殊的準備/修改。
順便,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_CORRECT
、SHELLOPTS
和BASHOPTS
變數)、選項(posix
、xpg_echo
)、建置選項和argv[0]
(sh
vs 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