paedubucher hat geschrieben: 13.10.2019 21:12:06
OK, den unteren Teil konnte ich schon einmal mit einem Here Document lösen:
Einfach und übersichtlich, wenn auch nicht POSIX-konform (oder?).
Das ist kein Here-Document (<<), sondern ein Here-String (<<<). Ersteres ist POSIX-konform, zweiteres AFAIK nicht.
Du kannst es aber ebenso so machen:
Das ist POSIX-konform und inhaltlich gleich.
Btw: Kein Grund fuer Grossbuchstaben fuer Variablennamen ... vielmehr eher ein Grund dagegen: Variablennamen in Grossbuchstaben ist der Namensraum der Systemvariablen. Eigene Variablen in Kleinbuchstaben, dann kann nichts kollidieren.
Was ich noch nicht verstehe ist der leere Delimiter oben (
-d ''):
-d '' sorgt scheinbar dafuer, dass `read' nicht eine Zeile einliest, sondern alles. Das kannst du aber auch einfacher haben:
(... wie du inzwischen ja schon selber rausgefunden hast.)
Ich möchte die Liste gerne oben separat haben, da ich diese ständig erweitern werde. (Hintergrund: Ich habe mir eine kleine CI-Pipeline aufgebaut, und ich möchte oben die einzelnen Skripts laufend ergänzen.)
Nachtrag: So geht es am einfachsten und ohne jegliche Bash-spezifischen Features:
Code: Alles auswählen
#!/bin/sh
TIERE="
Esel
Katze
Elefant
Hund
"
for TIER in $TIERE
do
echo $TIER
done
Das geht so aber nur, wenn in jeder Zeile nur ein Wort steht, weil das wortweise und nicht zeilenweise arbeitet, wie die Umsetzung mit `read'.
Sonst z.B. so:
Code: Alles auswählen
#!/bin/sh
TIERE="
Esel
Katze
Elefant
Hund
"
echo "$TIERE" | while read TIER
do
echo $TIER
done