Wie kann ich Benutzereingaben als Array in der bash
Shell lesen ?
command-line
bash
moata_u
quelle
quelle
cat war_and_peace.txt | ./array_test.sh
../array_test.sh < war_and_peace.txt
.Antworten:
Hier ist eine Möglichkeit, dies zu tun:
Wenn Sie es nur ausführen, liest es so lange von der Standardeingabe, bis Sie Strg + D (EOF) drücken. Danach befinden sich die von Ihnen eingegebenen Zeilen in
my_array
. Einige mögen diesen Code verwirrend finden. Der Körper der Schleife sagt im Grundemy_array = my_array + element
.Einige interessante Dokumente:
Das Advanced Bash-Scripting Guide enthält ein umfangreiches Kapitel zu Arrays
Die Hilfeseite des Lese builtin
15 Array-Beispiele von thegeekstuff.com
quelle
read -r
ist manchmal sehr nützlich / wichtig ... Stefano's Link zur "read builtin manpage" erklärt seinen Zweck ... (um Backslash-Interpretation zu verhindern).Lies es so:
Und zum Drucken verwenden Sie:
quelle
Und eine, die das Array nicht jedes Mal neu erstellt (obwohl Bash 3.1 oder neuer erforderlich ist):
Weitere Informationen finden Sie unter http://mywiki.wooledge.org/BashFAQ/001 .
Und um Fehler zu vermeiden, lesen Sie wie immer http://mywiki.wooledge.org/BashGuide und vermeiden Sie die tldp-Handbücher wie das Advanced bash scripting guide.
quelle
IFS
Problem aufmerksam gemacht haben. Ohne es zu nullen, 'lesen' Sie Skripte alle führenden und nachfolgenden Leerzeichen ... und natürlich auch die-r
...Wie wäre es mit diesem Einzeiler;)
Bearbeiten:
In
bash
,ist die Art der Zuweisung zu einem Array . In Verbindung mit der Befehlssubstitution können Sie Arrays aus der Pipeline einlesen, mit denen dies nicht auf
read
einfache Weise erreicht werden kann:Sie werden auf die Tatsache zurückzuführen , dass es Ausgabe nichts finden , das
read
nichts tut , wennstdin
ein Rohr , da eine Pipeline in einer Subshell ausgeführt werden kann , so dass die Variable überhaupt nicht verwendet werden können.Verwenden Sie den in dieser Antwort vorgeschlagenen Weg:
Dies
a b
ist viel einfacher und unkomplizierter als jede Problemumgehung, die durch die Antworten von Read-Werten in eine Shell-Variable aus einer Pipe und beim bash-Lesen, nachdem eine Pipe keine Werte festlegt, gegeben wird .quelle