it-swarm.com.de

Hinzufügen von Zeilenumbrüchen zu Unix-Shell-Variablen

Ich bin neu im Shell-Scripting. Ich habe eine Variable in einem Shell-Skript, in der ich die Daten formatieren möchte. Die Variable speichert neue Daten während jeder Wiederholung einer Schleife. Bei jeder Speicherung der neuen Daten möchte ich ein neues Zeilenzeichen einfügen. So versuche ich, die Daten in der Variablen zu speichern.

VARIABLE="$VARIABLE '\n' SomeData"

Leider enthält die Ausgabe das Literal '\n' Jede Hilfe wäre dankbar. Danke im Voraus.

30
James P.

$'\n' versuchen:

VAR=a
VAR="$VAR"$'\n'b
echo "$VAR"

gibt mir

a
b
55
vmpstr

Eine übliche Technik ist:

nl='
'
VARIABLE="PreviousData"
VARIABLE="$VARIABLE${nl}SomeData"

echo "$VARIABLE"
PreviousData
SomeData
20
William Pursell
VAR="one"
VAR="$VAR.\n.two"
echo -e $VAR

Ausgabe:

ein. 
.zwei

5
Alex

Anders als $'\n' können Sie printf auch so verwenden:

VARIABLE="Foo Bar"
VARIABLE=$(printf "${VARIABLE}\nSomeData")
echo "$VARIABLE"

AUSGABE:

Foo Bar
SomeData
3
anubhava

Es ist viel einfacher als Sie denken:

VARIABLE="$VARIABLE
SomeData"
1
chepner

Anführungszeichen Alle Sonderzeichen zwischen diesen Anführungszeichen verlieren ihre spezielle Bedeutung.
https://www.tutorialspoint.com/unix/unix-quoting-mechanisms.htm

Die von Ihnen verwendete Syntax bewirkt also etwas anderes, das Sie erreichen möchten.

Das brauchen Sie:

Das $ '\ X'-Konstrukt macht die Option -e im Echo überflüssig . 
https://linux.die.net/abs-guide/escapingsection.html

echo -e "something\nsomething"

oder 

echo "something"$'\n'"something"
1
user8175891

Ich hatte ein Problem mit allen anderen Lösungen: Wenn Sie einen #, gefolgt von SPACE (häufig beim Schreiben in Markdown) verwenden, würden beide in eine neue Zeile aufgeteilt.

Eine andere Möglichkeit wäre es, einfache Anführungszeichen zu verwenden, damit "\ n" gerendert wird.

FOO=$'# Markdown Title #\n'
BAR=$'Be *brave* and **bold**.'
FOOBAR="$FOO$BAR"

echo "$FOOBAR"

Ausgabe:

# Markdown Title #
Be *brave* and **bold**.
1
pattulus

Aufbauend auf den ersten beiden Lösungen würde ich wie folgt vorgehen. Das Verknüpfen von Strings mit dem Operator "+ =" sieht für mich irgendwie klarer aus.

Denken Sie auch daran, printf im Gegensatz zum Echo zu verwenden. Sie sparen sich so viel Ärger

sometext="This is the first line"
sometext+=$'\n\n'
sometext+="This is the second line AFTER the inserted new lines"
printf '%s' "${sometext}"

Ausgänge:

Dies ist die erste Zeile

Dies ist die dritte Zeile NACH der eingefügten neuen Zeile

0
Almendrico