GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Automatische Umwandlung von Zeilenumbrüchen in der Shell-Variablenzuweisung?

Dies ergab sich aus einem meiner Kommentare zu dieser Frage bezüglich der Verwendung von bc im Shell-Scripting. bc setzt Zeilenumbrüche in großen Zahlen, z.B.:

> num=$(echo 6^6^3 | bc)
> echo $num
12041208676482351082020900568572834033367326934574532243581212211450\ 20555710636789704085475234591191603986789604949502079328192358826561\ 895781636115334656050057189523456

Beachten Sie jedoch, dass es sich nicht wirklich um Zeilenumbrüche in der Variablen handelt – oder zumindest nicht, wenn sie ohne Anführungszeichen verwendet wird. Zum Beispiel beim Herumalbern mit mehr Pfeifen in der Zuweisung, z. B.:

num=$(echo 6^6^3 | bc | perl -pne 's/\\\n//g')

Mir wurde klar, dass es zwar wirklich einen \n gibt im bc Ausgabe, überprüfen Sie echo $num > tmp.txt mit hexdump zeigt den \n (ASCII 10) ist definitiv ein Leerzeichen (ASCII 32) in der Variablenzuweisung geworden.

Oder zumindest in der Ausgabe von $num > ohne Anführungszeichen . Warum ist das so?

Wie fedorqui betont, wenn Sie Anführungszeichen verwenden:echo "$num" , erhalten Sie wieder Zeilenumbrüche. Dies wird deutlich, wenn man den Unterschied zwischen echo $num > tmp.1 untersucht und echo "$num" > tmp.2 mit Hexdump; Ersteres enthält \ (Backslash-Leerzeichen), während letzteres \\n enthält (Backslash Zeilenumbruch).

Akzeptierte Antwort:

echo setzt ein Leerzeichen zwischen jeweils zwei Argumente. Die Shell berücksichtigt den Zeilenumbruch in $num nur ein Worttrennzeichen (genau wie Leerzeichen).

lines="a
b
c"
set -x
echo $lines   # several arguments to echo
echo "$lines" # one argument to echo

Siehe diese Antwort (vom OP selbst) für eine ausführlichere Erklärung.


Linux
  1. Wie bekomme ich den Namen des aktuellen Git-Zweigs in eine Variable in einem Shell-Skript?

  2. Liest Werte aus einer Pipe in eine Shell-Variable ein

  3. Shell - Variableninhalte in eine Datei schreiben

  4. Variablenbereich für Bash-Shell-Skripte und Funktionen im Skript

  5. Shell =Prüfe, ob Variable mit # beginnt

Exportbefehl in Linux erklärt

Was ist Subshell in Linux?

Alle Zeilenumbrüche werden entfernt, wenn die cat-Ausgabe in einer Variablen gespeichert wird

Wie werden Zeilenumbrüche beibehalten, wenn die Befehlsausgabe in einer Variablen gespeichert wird?

Iterieren Sie mithilfe des Shell-Skripts über die $PATH-Variable

Linux-Shell wc -c Zeichenanzahl +1