Vielen Dank für Ihre Geduld. Ich bin neu bei Linux und brauchte etwas Hilfe, um zu verstehen, wie ich die Ausgabe des Cut-Befehls analysieren kann.
Ich habe derzeit eine Variable
x=$(discover nginx --human=nood | cut -f1,6)
Meine Ausgabe ist also echo "$x
eine Liste mit
Instanz-ID IP-Adresse
In meinem Programm möchte ich eine For-Schleife über jede Zeile von x laufen lassen und die erste und die zweite Variable separat extrahieren. Beispiel: Wenn es ein Array wäre, wäre a[0] = instanceID und a[1]= IP-Adresse
Kann mir bitte jemand erklären, wie ich die Elemente einzeln extrahieren kann? Ich weiß, dass ich eine Schleife ausführen $x
und darin einen Schnitt machen kann, aber ich möchte herausfinden, ob es dafür eine bessere Möglichkeit gibt.
Antwort1
Dazu müssen Sie die Daten überhaupt nicht in einer Variablen speichern, eine Schleife über die Ausgabe discover
reicht aus:
discover nginx --human=nood | cut -f 1,6 |
while read -r instanceID IPAddress; do
# Use "$instanceID" and "$IPAddress" here
done
Alternativ können Sie in bash
oder einer Shell, die Prozesssubstitutionen ( <( ... )
) versteht, Folgendes tun:
while read -r instanceID IPAddress; do
# Use "$instanceID" and "$IPAddress" here
done < <( discover nginx --human=nood | cut -f 1,6 )
Der Unterschied zwischen diesen beiden ist nur sichtbar, wenn Sie die Werte einer Variablen übertragen möchtenaus der Schleife. Im ersten Beispiel wird die Schleife in einer Subshell ausgeführt und Sie würden daher keine Werte von Variablen verwenden, die innerhalb der Schleife gesetzt werdennachdie Schleife (sie existiert in ihrer eigenen lokalen Umgebung).
Im zweiten Beispiel sind keine Sub-Shells beteiligt (außer der, die die Prozessersetzung mit discover
und ausführt cut
), daher sind die Variablenwerte auch nach der Schleife zugänglich.