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.)