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ć?

damekr
źródło
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
PSkocik
źródło
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.

mikeserv
źródło