echo
Una echorealizzazione 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 \cargomenti 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 echosul farlo.
Una bashshell in genere non è conforme alle specifiche e gestisce le -naltre 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 echopredefinito il carattere predefinito con caratteri di escape con barra rovesciata, senza richiedere l' -eopzione. Questo imposta il valore predefinito xpg_echodell'opzione shell su on, il che rende Bash echopiù simile alla versione specificata nella specifica Unix singola, versione 3. Vedi Bash Builtins , per una descrizione delle sequenze di escape che echoriconosce.
printf
D'altra parte, printfil comportamento è piuttosto docile in confronto.
FONDAMENTO LOGICO
L' printfutilità è stata aggiunta per fornire funzionalità storicamente fornite da echo. Tuttavia, a causa delle differenze inconciliabili tra le varie versioni di echoextant, la versione ha poche caratteristiche speciali, lasciando quelle a questa nuova printfutility, 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 %bstringhe %syte o stringhe letterali . A parte gli %format nel primo argomento, si comporta come un %bargomento stringa yte, tranne per il fatto che non gestisce la \cfuga.
printf ^%b%s$ '\n' '\n' '\t' '\t'
^
\n$^ \t$
Vedi Perché è printfmeglio di echo? per più.
echo() printf
Potresti scrivere i tuoi standard conformi echocome ...
echo(){
printf '%b ' "$@\n\c"
}
... che dovrebbe praticamente fare sempre la cosa giusta automaticamente.
In realtà, no ... Questo stampa un valore letterale \nalla 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
echoobbligatorio? puoi usareprintf.