Linux-Shell-Skripting: unerwartetes Variablenverhalten

Linux-Shell-Skripting: unerwartetes Variablenverhalten

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:

  1. Warum druckt Echo Leerzeichen statt Zeilenumbrüche?
  2. 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 echoin 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 -n1funktioniert es perfekt. Es hängt von Ihren Anforderungen und den möglichen Werten ab, ob das tatsächlich das ist, was Sie brauchen.

verwandte Informationen