W pętli nad tablicą dodaj element do tablicy


9

Mam problem z pętlą for w bash. Na przykład: Mam tablicę ("etc" "bin" "var"). I iteruję na tej tablicy. Ale w pętli chciałbym dodać trochę wartości do tablicy. Na przykład

array=("etc" "bin" "var")
for i in "${array[@]}"
do
echo $i
done

Wyświetla się etc bin var(oczywiście w osobnych wierszach). A jeśli dołączę później do:

array=("etc" "bin" "var")
for i in "${array[@]}"
do
array+=("sbin")
echo $i
done

Chcę: etc bin var sbin(oczywiście na osobnych liniach).

To nie działa. Jak mogę to zrobić?


1
Zmiana rzeczy, nad którą iterujesz, jest zawsze ryzykowną propozycją. Często jest to dobry moment, aby się wycofać i rozważyć, czy istnieje inne podejście, które może mieć sens
Eric Renouf,

Odpowiedzi:


6

To będzie dołączenie „sbin” 3 razy, ile trzeba, ale nie iteracyjnego nowo dodanej „sbin” S w tej samej pętli.

Po drugim przykładzie:

echo "${array[@]}"
#=> etc bin var sbin sbin sbin

Tak, zgadza się, ale muszę dodać do tej samej pętli :)
damekr

forNastępnie użyj dwóch pętli. Najpierw przejrzyj swoje dodatki, a następnie przewiń wynik.
PSkocik

1
Nie rozumiem jednak, dlaczego chcesz dołączyć sbin w pętli. Dołączenie go tylko raz ma sens:array+=(sbin); for i in ...
PSkocik

ponieważ w pętli for muszę sprawdzić, czy jakiś plik kopiowany przez to for pętli ma jakąś zawartość ..
damekr

5
set etc bin var
while [ "$#" -gt 1 ]
do    [ "$1" = bin ] &&
      set "$@" sbin
      printf %s\\n "$1"
shift;done 

Spowoduje to iterację Twojej listy, sbinwarunkowo na końcu tej listy i uwzględnienie sbinw treści iterowalnej.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.