Qual è la differenza tra l'utilizzo
echo -e "Hello\nWorld"
e
echo $"Hello\nWorld"
non producono entrambi:
Hello
World
echo $'Hello\nWorld'
, che verranno stampate su due righe sotto bash.
Qual è la differenza tra l'utilizzo
echo -e "Hello\nWorld"
e
echo $"Hello\nWorld"
non producono entrambi:
Hello
World
echo $'Hello\nWorld'
, che verranno stampate su due righe sotto bash.
Risposte:
echo -e
e echo $'...'
sono entrambi simili in quanto supportano le seguenti sequenze di escape:
\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)
Hanno delle differenze. Oltre a quanto sopra, echo -e
supporta:
\c suppress further output
\0nnn the eight-bit character whose value is the octal value nnn (zero to three octal digits)
Al contrario, $'....'
supporta:
\' 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
Si noti che, tra i due, le \c
estensioni sono incompatibili:
$ echo -e 'start\n\cIstop'
start
$ echo $'start\n\cIstop'
start
stop
Per quanto echo -e
sopra, \c
sopprime l'ulteriore output, ignorando così il Istop
. Al contrario, per $'...'
, \cI
viene interpretato come una scheda.
$"..."
Al contrario $'...'
, la funzione di $"..."
è piuttosto diversa. Provocherà la traduzione della stringa che contiene in base alle impostazioni internazionali correnti.
echo -e
polemicaecho -e
non è universalmente supportato da shell e molti considerano l' -e
opzione come un errore di progettazione. Osservare:
$ ls
-e -n
$ echo *
$ printf "%s\n" *
-e
-n
Come puoi vedere, se ciò che stai stampando echo
inizia con un trattino, i risultati possono essere inattesi. A meno che non si sia certi che la prima stringa con cui si stamperà echo
non inizi con un trattino, è probabile che sia meglio utilizzarla printf
.
Per questi motivi, lo standard POSIX conclude :
Le nuove applicazioni sono incoraggiate a utilizzare printf anziché echo.
Chet Ramey, che ha mantenuto bash
negli ultimi 22 anni, concorda :
[N] Il codice ew dovrebbe usare printf.
*
) non è in realtà specifico echo
. Accade con qualsiasi comando che riconosca le opzioni brevi o lunghe (scritte in modo tradizionale) e accetta gli operandi di nome file, inclusols
. Probabilmente la situazione è un po 'peggiore in echo
quanto (come dice la tua fonte) in echo
genere non accetta --
di indicare la fine delle opzioni, mentre si possono scrivere comandi simili ls -- *l
. (E in realtà si dovrebbe solitamente scrivere comandi in quel modo, quando si usano globs che iniziano con *
o -
, soprattutto negli script.)
\n
sequenza di escape, quindi in realtà non importa se uso echo -e '...'
, echo $'...'
oecho $"..."
Hello\nWorld
. È necessario l'-e
interruttore per interpretare i caratteri di escape.