Dies ist der Befehl: pdc status -a 2>&1 | grep 'okay'
Er gibt die folgende Ausgabe aus
[okay ]: you are currently listening: 33
[okay ]: you are currently listening: 22
[okay ]: you are currently listening: 11
Ich habe diesen Befehl in Shell-Scrip-Datei geschrieben. Aber ich möchte die Ausgabe dieses Befehls in das Array speichern, damit sie für jeden Indexwert im Array verarbeitet werden kann.
Wie kann ich die Ausgabe dieses Befehls im Array speichern?
mapfile -t array < <(grep.....)
Zunächst benötigen Sie nicht unbedingt das Array, um die Ausgabe zeilenweise zu verarbeiten.
Wenn Sie das Array tun müssen, Glenn Jackman gab bereits Ihnen den besten Weg , es zu tun , aber hier ist ein anderer Ansatz:
Erläuterung:
$IFS=$'\n'
:$IFS
ist das Eingabefeld-Trennzeichen der Bash , wenn es nur auf das Zeilenumbruch-Zeichen (\n
) gesetzt wird, wird sichergestellt, dass Ihre Ausgabezeilen nicht durch Leerzeichen getrennt werden, sodass Sie jede Zeile als separates Array-Element speichern können. Ohne dies wäre jedes Wort der Ausgabe Ihres Befehls ein anderes Element.Je nachdem, was Sie tun möchten, ist es möglicherweise eine gute Idee, den alten Wert von zu speichern
$IFS
und wiederherzustellen, nachdem das Array gelesen wurde:$(command)
: Dies wird als Befehlsersetzung bezeichnet und ermöglicht es Ihnen, die Ausgabe eines Befehls in einer Variablen zu speichern. Dafür gibt es zwei Möglichkeiten:und
Von den beiden ist das
$()
besser, weil:Es kann mit verschachtelten Befehlen umgehen:
Beispielsweise
var=$(cat $(find ~/))
Es hat weitaus weniger Probleme mit Zitaten und führt zu einer saubereren Syntax. Sehen Sie hier für mehr.
quelle
Noch eine intuitivere Methode zur Verwendung von
readarray
builtin (siehehelp -m readarray
):Als Nächstes können Sie zum Drucken eines Array-Elements, beispielsweise eines zweiten Elements, Folgendes verwenden:
Um alle Array-Elemente in separaten Zeilen zu drucken, können Sie Folgendes verwenden:
quelle