Ich möchte verschiedene Zeilen einer Textdatei zu verschiedenen Variablen lesen. Beispielsweise
input.txt
:
line1 foo foobar bar
line2 bar
line3 foo
line4 foobar bar
Ich möchte dieses Ergebnis in Variablen gespeichert werden var1
, var2
, var3
und var4
so , dass
var1=line1 foo foobar bar
var2=line2 bar
und so weiter.
Könnte mir bitte jemand sagen, wie es gemacht wird. Ich habe versucht, eval
in einer for-Schleife zu verwenden. Es scheint nicht zu funktionieren.
grep
,cut
et. Al.), Es ist viel viel besser, einfach das zu tun, was Sie tun müssen. Nicht in einem Shell-Skript mikromanagen. Instrumente orchestrieren, um die Arbeit zu erledigen.Antworten:
Du würdest tun:
Oder:
(Dies
line
ist weniger effizient, da es nur selten eingebaut ist und die meisten Shells sich trennen müssen, um die Befehlsersetzung zu implementieren. Diesline
ist auch kein Standardbefehl mehr.)So verwenden Sie eine Schleife:
Oder um die Namen der Variablen automatisch wie folgt zu definieren
line<++n>
:Beachten Sie, dass
bash
Array-Variablen und eine integriertereadarray
Funktion zum Einlesen von Zeilen in ein Array unterstützt werden:Beachten Sie jedoch , dass im Gegensatz zu den meisten anderen Muscheln,
bash
starten Array - Indizes bei 0 nicht 1 (geerbt vonksh
), so dass die erste Zeile sein wird${line[0]}
, nicht${line[1]}
(obwohl wie @Costas gezeigt hat , können Sie machenreadarray
(akamapfile
) beginnen die Werte bei indice Schreiben 1 (bash
Arrays auch im Gegensatz zu den meisten anderen Shells sind spärliche Arrays) mit-O 1
).Siehe auch: "IFS = read -r line" verstehen?
quelle
Ich würde anbieten, Array für solche Aufgabe (n) zu verwenden
so dass Sie jede Zeile in haben
${var[1]}
,${var[2]}
und so weiterquelle
Dies ist nicht genau das, wonach Sie gefragt haben, aber es könnte für Ihre Bedürfnisse funktionieren. Sie können die Daten mit Awk serialisieren. Beachten Sie, dass dies nicht funktioniert, wenn Ihr $ 1 kein gültiger Variablenname ist:
Ergebnis:
quelle