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