echo -e
ve echo $'...'
her ikisi de aşağıdaki kaçış dizilerini desteklemeleri bakımından benzerdir:
\a alert (bell)
\b backspace
\e
\E an escape character
\f form feed
\n new line
\r carriage return
\t horizontal tab
\v vertical tab
\\ backslash
\0nnn the eight-bit character whose value is the octal value nnn (zero to three octal digits)
\xHH the eight-bit character whose value is the hexadecimal value HH (one or two hex digits)
\uHHHH the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value HHHH (one to four hex digits)
\UHHHHHHHH
the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value HHHHHHHH (one to eight hex digits)
Farklılıkları var. Yukarıdakilere ek olarak, echo -e
şunları destekler:
\c suppress further output
\0nnn the eight-bit character whose value is the octal value nnn (zero to three octal digits)
Buna karşılık, $'....'
şunları destekler:
\' single quote
\" double quote
\nnn the eight-bit character whose value is the octal value nnn (one to three digits)
\cx a control-x character
İkisi arasında \c
uzantıların uyumsuz olduğuna dikkat edin :
$ echo -e 'start\n\cIstop'
start
$ echo $'start\n\cIstop'
start
stop
İçin echo -e
yukarıdaki \c
ve böylece göz ardı ederek, daha çıkış bastırır Istop
. Buna karşılık, için $'...'
, \cI
bir sekme olarak yorumlanır.
Görsel olarak benzer form: $"..."
Buna karşılık $'...'
, işlevi $"..."
oldukça farklıdır. İçerdiği dizginin geçerli yerel ayara göre çevrilmesine neden olur.
echo -e
tartışma
echo -e
evrensel olarak mermiler tarafından desteklenmez ve birçoğu -e
seçeneği tasarım hatası olarak görür. Gözlemek:
$ ls
-e -n
$ echo *
$ printf "%s\n" *
-e
-n
Gördüğünüz gibi, yazdırdığınız şey echo
bir tire işareti ile başlarsa, sonuçlar beklenmedik olabilir. Yazdıracağınız ilk dizenin echo
bir tire işareti ile başlamadığından emin değilseniz, muhtemelen daha iyi durumda olursunuz printf
.
Bu nedenlerle POSIX standardı şu sonuca varır :
Yeni uygulamaların echo yerine printf kullanmaları önerilir.
bash
Son 22 yıldır sürdüren Chet Ramey de aynı fikirde :
[N] yeni kod printf kullanmalıdır.
Hello\nWorld
.-e
Kaçış karakterlerini yorumlamak için anahtara ihtiyacınız var .