bash printf mit new line
Ich bin ein wenig verwirrt mit dem Druck eine variable, die enthält eine neue Zeile symbol in der bash.
var="Age:\n20\ncolor:\nred"
echo -e $var
Age:
20
color:
red
Dies ist Arbeit, aber eine Menge Leute sagen, dass das echo mit Optionen ist nicht tragbar und besser ist die Verwendung von printf ().
Ich nie benutzt prinf. Laut den Handbüchern emitate echo-Befehl:
printf '%s\n' "$var"
Age:\n20\ncoloe:\nred
Aber nicht Parsen \n innere variable. Handbücher haben in der Regel dieses Beispiel:
printf "Surname: %s\nName: %s\n" "$SURNAME" "$LASTNAME"
Aber es ist nicht mein Fall und aus meiner Sicht nicht komfortabel zu bedienen. Ich fand heraus, einfach durch die Eingabe, dass ich diese:
printf "$var\n"
Ist es portabel?
Wenn ich mich dann übergeben, $var zu einem mail-Befehl wird das speichern neuer Zeilenumbrüche?
printf "$var\n" | mail -s subj email@domain.com
- Problem mit
printf
ist, dass es ein shell-built-in auf einige shells (bash und ksh93) aber ein externer Prozess auf andere (sh, ksh88, csh). Also mitprintf
auf älteren Muscheln dämpfen könnten-bis Sie das Programm, je nachdem, wie viele Male Sie es verwenden.
Du musst angemeldet sein, um einen Kommentar abzugeben.
printf
's%b
Formatbezeichner gemeint war insbesondere zu ersetzenecho -e
(eigentlich ist die XSI-Erweiterungecho
welche Anrufe für spezielle Auslegung der Argumente standardmäßig.-e
wurde nie angegeben und ist nicht zulässig, die POSIX.), und ist identisch in fast jeder Hinsicht, einschließlich ein paar Unterschiede$'...'
- und der format-string argumentprintf
.Sollten Sie generell vermeiden, den ausbau von Variablen in string format, es sei denn, Ihr Programm steuert den genauen Wert und es ist speziell, um ein format-string. Dein letztes Beispiel hat insbesondere das Potenzial, sehr gefährlich sein in der Bash durch
printf
's-v
option.Ist es in der Regel gute Praxis, um zu vermeiden
%b
es sei denn, Sie haben eine Besondere Portabilität Voraussetzung. Speichern Sie die escape-codes in einer Variablen statt literalen Daten verstößt gegen die Prinzipien der Trennung von code und Daten. Es gibt Kontexte, in denen das ok ist, aber es ist in der Regel besser zu zuordnen, die den Wert mit$'...'
zitiert, die angegeben ist für die nächste version von POSIX, und ist schon lange verfügbar in Bash und die meisten ksh Aromen.%b
ist eine sehr gute Sache, die brauchen nicht vermieden werden, wenn es bedeutete, zu ersetzenecho -e
.