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 -ee 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 -esupporta:
\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 \cestensioni sono incompatibili:
$ echo -e 'start\n\cIstop'
start
$ echo $'start\n\cIstop'
start
stop
Per quanto echo -esopra, \csopprime l'ulteriore output, ignorando così il Istop. Al contrario, per $'...', \cIviene 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 -epolemicaecho -enon è universalmente supportato da shell e molti considerano l' -eopzione come un errore di progettazione. Osservare:
$ ls
-e -n
$ echo *
$ printf "%s\n" *
-e
-n
Come puoi vedere, se ciò che stai stampando echoinizia con un trattino, i risultati possono essere inattesi. A meno che non si sia certi che la prima stringa con cui si stamperà echonon 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 bashnegli 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 echoquanto (come dice la tua fonte) in echogenere 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.)
\nsequenza di escape, quindi in realtà non importa se uso echo -e '...', echo $'...'oecho $"..."
Hello\nWorld. È necessario l'-einterruttore per interpretare i caratteri di escape.