In un ciclo su un array, aggiungi un elemento all'array


9

Ho un problema con for loop in bash. Ad esempio: ho un array ("etc" "bin" "var"). E ho iterato su questo array. Ma nel loop vorrei aggiungere un valore all'array. Per esempio

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

Questo visualizza etc bin var(ovviamente su linee separate). E se aggiungo dopo docosì:

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

Voglio: etc bin var sbin(ovviamente su linee separate).

Questo non sta funzionando. Come posso farlo?


1
Modificare la cosa su cui stai ripetendo è sempre una proposta rischiosa. Spesso è un buon momento per fare un passo indietro e considerare se esiste un altro approccio che potrebbe avere senso
Eric Renouf,

Risposte:


6

Essa si aggiungerà "sbin" 3 volte come si deve, ma non lo farà scorrere i appena aggiunto "sbin" s nello stesso ciclo.

Dopo il secondo esempio:

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

Sì, è vero, ma ho bisogno di aggiungere allo stesso loop :)
damekr

Utilizzare quindi due foranelli. Prima di tutto esegui le tue aggiunte, quindi passa in rassegna il risultato.
PSkocik,

1
Non vedo perché vorresti aggiungere sbin nel loop però. L'aggiunta di una sola volta ha più senso:array+=(sbin); for i in ...
PSkocik,

perché nel ciclo devo verificare se alcuni file che stanno copiando da questo per il ciclo hanno del contenuto ..
damekr

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

Ciò passerà in rassegna il tuo elenco, attaccherà condizionalmente sbinla fine di tale elenco e includerà sbinnel contenuto iterabile.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.