La storia mista di echo
significa che il suo funzionamento predefinito varia da shell a shell. POSIX specifica che il risultato di echo
è "definito dall'implementazione" se il primo argomento è -n
o qualsiasi argomento contiene una barra rovesciata.
È più affidabile usare printf
(sia come comando integrato che come comando esterno) dove il comportamento è più ben definito:gli escape della barra rovesciata in stile C e gli identificatori di formato sono supportati nella stringa di formato (il primo argomento).
printf 'foo\nbar\n'
printf '%s\n%s\n' foo bar
Puoi controllare l'espansione delle sequenze di escape della barra rovesciata di bash echo
di comando integrato con xpg_echo
opzione shell.
Impostalo in cima a qualsiasi bash script per creare echo
espande automaticamente i backslash escape senza dover aggiungere -e
ad ogni comando echo.
shopt -s xpg_echo
echo 'foo\nbar'
La pratica consigliata è usare printf
per tutti i nuovi script.
printf '%s\n%s\n' "Hello" "World"
printf '%s\n' "Hello\nWorld"
Quando usi bash myfile.sh
, Bash viene eseguito in modalità "batch", su un separato processo e non leggi il suo profilo o rcfile.
Quando usi . myfile.sh
, il file è originato dall'attuale processo della shell (come se i suoi contenuti fossero stati digitati da te), quindi vede i tuoi alias attualmente definiti.
In generale, è una pessima idea scrivere script che dipendono da una particolare configurazione della shell, soprattutto alias, a meno che tu non li definisca nello script si. (Mai fare affidamento sul .bashrc
dell'utente , anche se è tuo.)