To polecenie: pdc status -a 2>&1 | grep 'okay'
Daje następujące dane wyjściowe
[okay ]: you are currently listening: 33
[okay ]: you are currently listening: 22
[okay ]: you are currently listening: 11
Napisałem to polecenie w pliku skryptu powłoki. Chcę jednak zapisać dane wyjściowe tego polecenia w tablicy w celu przetworzenia każdej z wartości indeksu w tablicy.
Jak mogę zapisać dane wyjściowe tego polecenia w tablicy?
mapfile -t array < <(grep.....)
Po pierwsze, niekoniecznie potrzebujesz tablicy, aby przetwarzać dane wyjściowe linia po linii, możesz:
Jeśli potrzebujesz tablicy, Glenn Jackman już dał ci najlepszy sposób na zrobienie tego, ale oto inne podejście:
Wyjaśnienie:
$IFS=$'\n'
:$IFS
jest separatorem pól wejściowych bash , ustawienie go tylko na znak nowej linii (\n
) gwarantuje, że linie wyjściowe nie zostaną podzielone na białe znaki, dzięki czemu można zapisać każdą linię jako osobny element tablicy. Bez tego każde słowo wyjściowe polecenia byłoby innym elementem.W zależności od tego, co chcesz zrobić, dobrym pomysłem może być zapisanie starej wartości
$IFS
i przywrócenie jej po odczytaniu tablicy:$(command)
: Nazywa się to substytucją poleceń i pozwala zapisać wynik polecenia w zmiennej. Można to zrobić na dwa sposoby:i
Z tych dwóch
$()
jest lepiej, ponieważ:Może poradzić sobie z zagnieżdżonymi poleceniami:
Na przykład
var=$(cat $(find ~/))
Ma znacznie mniej problemów z cytowaniem i zapewnia czystszą składnię. Zobacz tutaj po więcej.
źródło
Jeszcze inny intuicyjny sposób korzystania z
readarray
wbudowanego (patrzhelp -m readarray
):Następnie, aby wydrukować element tablicy, powiedzmy drugi element, możesz użyć:
Aby wydrukować wszystkie elementy tablicy w osobnych wierszach, możesz użyć:
źródło