printf Zeichenfolge in Anführungszeichen
Ich versuche, eine Tabelle in bash zu erstellen - ich habe alle Überschriften in einer Variable gesammelt - aber wenn ich diese in "'s eingeschlossenen Zeichenfolgen drucke, werden sie vom Befehl printf als neue Spalten und nicht als eine behandelt
Wenn ich dieselben Werte direkt übergebe, funktioniert das einwandfrei, aber ich bekomme ein anderes Verhalten, wenn ich stattdessen $ var verwende.
$ printf '%-20s' "some spaced words" other values; echo -e "\n"
some spaced words other values
$ values='"some spaced words" other values' $ echo $values "some spaced words" other values $ printf '%-20s' $values; echo -e "\n"
"some spaced words" other values
Ich verstehe eindeutig etwas falsch darüber, wie sich meine Variable von der unterscheidet < some string >und daher zu einem unterschiedlichen Verhalten führt.
Wie erhalte ich die Ausgabe, die mit Ausgabe 1 übereinstimmt, wenn ich eine Variable verwende?
Bearbeiten: Ich kann sehen, dass die var-Version die Anführungszeichen enthält. Gibt es eine Möglichkeit, Zeichenfolgen in Anführungszeichen als Variable an printf zu übergeben?
Antworten
Die Variable wird erweitert, bevor die Shell einen Befehl ausführt, dh printfhier, und die Wortaufteilung erfolgt nach der Variablenerweiterung. Verwenden Sie ein Array anstelle einer skalaren Variablen:
values=('some spaced words' other values)
printf %-20s "${values[@]}"