
Ich habe eine Variable $myvar
, die zwei Zeilen enthält, und ich möchte die erste davon in eine neue Variable einfügen.
Wenn ich es versuche:
$ myvar1 = $(echo $myvar | head -n 1)
Es funktioniert nicht, weil Echo keine Zeilenumbrüche ausgibt, wie ich es erwarte.
Offensichtlich kann ich dies tun:
$ myvar1 = $(echo $myvar | cut -d " " -f 1)
Dies funktioniert, da die Ausgabe von Echo ein Wort in der ersten Zeile und ein Wort in der zweiten enthält.
Ich habe zwei Fragen:
- Warum druckt Echo Leerzeichen statt Zeilenumbrüche?
- Ist es möglich, es einfacher oder korrekter zu machen (ich bin kein Experte im Shell-Scripting, vielleicht übersehe ich hier etwas)
Antwort1
Setzen Sie das Argument echo
in Anführungszeichen, um Leerzeichen richtig beizubehalten.
echo "$myvar"
Andernfalls werden die durch Leerzeichen getrennten Elemente des Werts als einzelne Argumente behandelt echo
.
$ ls -1
Desktop
Documents
Downloads
Movies
Music
Pictures
Sites
$ myvar="$( ls -1 )"
$ echo $myvar
Desktop Documents Downloads Movies Music Pictures Sites
$ echo "$myvar"
Desktop
Documents
Downloads
Movies
Music
Pictures
Sites
Um die erste Zeile von etwas zu erhalten, head -n1
funktioniert es perfekt. Es hängt von Ihren Anforderungen und den möglichen Werten ab, ob das tatsächlich das ist, was Sie brauchen.