echo
Una echo
realizzazione che si conforma strettamente alla Single Unix Specification aggiungerà nuove righe se si fa:
echo 'line1\nline2'
Ma questo non è un comportamento affidabile. In realtà, c'è in realtà non è un comportamento standard che ci si può aspettare di echo
.
OPERANDI
string
Una stringa da scrivere nell'output standard. Se il primo operando è -n
, o se uno qualsiasi degli operandi contiene un carattere < \
barra rovesciata> , i risultati sono definiti dall'implementazione .
Sui sistemi conformi XSI , se il primo operando è -n
, deve essere trattato come una stringa, non un'opzione . Le seguenti sequenze di caratteri devono essere riconosciute su sistemi conformi XSI all'interno di uno qualsiasi degli argomenti:
\a
- Scrivi un <allerta> .
\b
- Scrivi un <backspace> .
\c
- Sopprime il <newline> che altrimenti segue l'argomento finale nell'output. Tutti i caratteri che seguono gli \c
argomenti devono essere ignorati.
\f
- Scrivi un <feed di alimentazione> .
\n
- Scrivi una <newline> .
\r
- Scrivi un <carriage-return> .
\t
- Scrivi un <tab> .
\v
- Scrivi un <vertical-tab> .
\\
- Scrivi un carattere <barra rovesciata> .
\0num
- Scrivere un valore di 8 bit che è il numero ottale zero, uno, due o tre cifre num
.
E quindi non c'è davvero alcun modo generale per sapere come scrivere una nuova riga echo
, tranne per il fatto che in genere puoi fare affidamento solo echo
sul farlo.
Una bash
shell in genere non è conforme alle specifiche e gestisce le -n
altre opzioni, ma anche questo è incerto. Tu puoi fare:
shopt -s xpg_echo
echo hey\\nthere
hey
there
E nemmeno questo è necessario se bash
è stato creato con l'opzione build-time ...
--enable-xpg-echo-default
Rende echo
predefinito il carattere predefinito con caratteri di escape con barra rovesciata, senza richiedere l' -e
opzione. Questo imposta il valore predefinito xpg_echo
dell'opzione shell su on
, il che rende Bash echo
più simile alla versione specificata nella specifica Unix singola, versione 3. Vedi Bash Builtins , per una descrizione delle sequenze di escape che echo
riconosce.
printf
D'altra parte, printf
il comportamento è piuttosto docile in confronto.
FONDAMENTO LOGICO
L' printf
utilità è stata aggiunta per fornire funzionalità storicamente fornite da echo
. Tuttavia, a causa delle differenze inconciliabili tra le varie versioni di echo
extant, la versione ha poche caratteristiche speciali, lasciando quelle a questa nuova printf
utility, che si basa su una nel sistema della nona edizione.
La sezione DESCRIZIONE ESTESA corrisponde quasi esattamente alla printf()
funzione dello standard ISO C, sebbene sia descritta in termini di notazione del formato file in Notazione formato file XBD .
Gestisce stringhe di formato che descrivono i suoi argomenti - che possono essere un numero qualsiasi di cose, ma per le stringhe sono praticamente o %b
stringhe %s
yte o stringhe letterali . A parte gli %f
ormat nel primo argomento, si comporta come un %b
argomento stringa yte, tranne per il fatto che non gestisce la \c
fuga.
printf ^%b%s$ '\n' '\n' '\t' '\t'
^
\n$^ \t$
Vedi Perché è printf
meglio di echo
? per più.
echo() printf
Potresti scrivere i tuoi standard conformi echo
come ...
echo(){
printf '%b ' "$@\n\c"
}
... che dovrebbe praticamente fare sempre la cosa giusta automaticamente.
In realtà, no ... Questo stampa un valore letterale \n
alla fine degli argomenti se l'ultimo argomento termina con un numero dispari di <barre rovesciate> .
Ma questo non:
echo()
case ${IFS- } in
(\ *) printf %b\\n "$*";;
(*) IFS=\ $IFS
printf %b\\n "$*"
IFS=${IFS#?}
esac
echo
obbligatorio? puoi usareprintf
.