L'histoire mitigée de echo signifie que son fonctionnement par défaut varie d'un shell à l'autre. POSIX spécifie que le résultat de echo est "défini par l'implémentation" si le premier argument est -n ou tout argument contient une barre oblique inverse.
Il est plus fiable d'utiliser printf (soit en tant que commande intégrée, soit en tant que commande externe) où le comportement est mieux défini :les échappements antislash de style C et les spécificateurs de format sont pris en charge dans la chaîne de format (le premier argument).
printf 'foo\nbar\n'
printf '%s\n%s\n' foo bar
Vous pouvez contrôler l'expansion des séquences d'échappement antislash de bash est echo commande intégrée avec le xpg_echo option shell.
Placez-le en haut de n'importe quel bash script pour faire echo développe automatiquement les échappements antislash sans avoir à ajouter -e à chaque commande d'écho.
shopt -s xpg_echo
echo 'foo\nbar'
La pratique recommandée consiste à utiliser printf pour tous les nouveaux scripts.
printf '%s\n%s\n' "Hello" "World"
printf '%s\n' "Hello\nWorld"
Lorsque vous utilisez bash myfile.sh , Bash est exécuté en mode "batch", sur un séparé processus, et ne le fait pas lire son profil ou rcfile.
Lorsque vous utilisez . myfile.sh , le fichier est source par le processus shell actuel (comme si son contenu avait été tapé par vous), il voit donc vos alias actuellement définis.
En général, c'est une très mauvaise idée d'écrire des scripts qui dépendent d'une configuration de shell particulière, surtout alias, sauf si vous les définissez dans le script lui-même. (Jamais compter sur le .bashrc de l'utilisateur , même si c'est le vôtre.)