Wie weisen Sie einen Wert zu einem array in der bash?
Ich versuche zu Lesen, eine Liste von Werten aus einer Textdatei hello.txt und speichern Sie Sie in einem array.
counter=0
cat hello.txt | while read line; do
${Unix_Array[${counter}]}=$line;
let counter=counter+1;
echo $counter;
done
echo ${Unix_Array[0]}
echo ${Unix_Array[1]}
echo ${Unix_Array[2]}
Ich bin nicht in der Lage, Werte zuweisen array Unix_Array[].. Die echo-Anweisung nicht drucken Sie den Inhalt des Arrays.
InformationsquelleAutor | 2012-06-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es ein paar syntax-Fehler, aber das klare problem ist, dass die Zuordnungen sind passiert, aber Sie sind in einer stillschweigenden subshell. Durch die Verwendung einer Pfeife ist, haben Sie eine subshell für die gesamte while-Anweisung. Wenn die while-Anweisung erfolgt, ist die subshell beendet und Ihre
Unix_Array
aufhört zu existieren.In diesem Fall, die einfachste Lösung ist nicht die Verwendung einer pipe:
Durch die Art und Weise, die Sie nicht wirklich brauchen die Zähler. Ein einfacher Weg, dies zu schreiben, könnte sein:
+1. Beachten Sie außerdem, dass die Inbetriebnahme
IFS=$'\n' declare some_array=($(<hello.txt))
alle auf einer Linie bedeutet, dass Sie nicht haben, zu speichernIFS
imoIFS
. Wenn verwendet, dieser Weg, derIFS
variable wird nur für den Kommandozeilen-es geht voran. Beachten Sie, dassdeclare
ist der Befehl hier; ohne Sie, Sie haben nur ein paar Variablenzuweisungen.InformationsquelleAutor kojiro
Wenn Sie die bash benutzen, v4 oder höher verwenden, können Sie
mapfile
um dies zu erreichen:Sonst sollte diese Arbeit:
InformationsquelleAutor jordanm
Statt:
Können Sie genau dies tun:
Ohne Neuzuweisung
IFS
, so erstellen Sie mehrere Elemente für eine Zeile mit einem Leerzeichen.InformationsquelleAutor Jon Lin
Seine Lösung:
IFS
zu einem newline oder werden Sie aufgeteilt auf jeden Leerzeichen inhello.txt
.Du hast Recht, Danke für deine Korrektur.
InformationsquelleAutor Arthur Alves
Der beste Weg den ich gefunden ist:
Und dann konsumieren Sie es mit:
InformationsquelleAutor Alex