bash printf avec une nouvelle ligne

Je suis un peu confus avec l'impression d'une variable contenant une nouvelle ligne de symbole dans bash.

var="Age:\n20\ncolor:\nred"
echo -e $var
Age:
20
color:
red

C'est du travail, mais beaucoup de gens disent que l'écho avec des options est pas de portable et il est préférable d'utiliser printf.

Je n'ai jamais utilisé prinf. Selon les manuels de emitate commande echo:

printf '%s\n' "$var"
Age:\n20\ncoloe:\nred

Mais cela ne veut pas analyser \n à l'intérieur de la variable. les manuels ont généralement cet exemple:

printf "Surname: %s\nName: %s\n" "$SURNAME" "$LASTNAME"

Mais ce n'est pas mon cas, et de mon point de vue, il est pas confortable à utiliser. J'ai trouvé en tapant simplement que je peux utiliser ceci:

printf "$var\n"

Est-il portable?
Si je puis passage de $var pour une commande de courrier électronique, il sera de sauvegarder de nouveaux sauts de ligne?

printf "$var\n" | mail -s subj email@domain.com 
Problème avec printf est que c'est un interpréteur intégré sur certains shells (bash et ksh93), mais un processus externe sur les autres (sh, ksh88, csh). Donc, en utilisant printf sur de vieilles coquilles pourrait ralentir, vous programme, en fonction de combien de fois vous l'utilisez.

OriginalL'auteur idobr | 2013-03-22