Em um loop sobre uma matriz, adicione um elemento à matriz


9

Eu tenho um problema com o loop for no bash. Por exemplo: eu tenho uma matriz ("etc" "bin" "var"). E eu itero nessa matriz. Mas, no loop, gostaria de acrescentar algum valor ao array. Por exemplo

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

Isso é exibido etc bin var(é claro em linhas separadas). E se eu acrescentar depois doassim:

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

Eu quero: etc bin var sbin(é claro em linhas separadas).

Isto não está a funcionar. Como eu posso fazer isso?


1
Alterar o que você está repetindo é sempre uma proposta arriscada. É muitas vezes um bom momento para o passo para trás e considerar se há uma outra abordagem que pode fazer sentido
Eric Renouf

Respostas:


6

Ele irá acrescentar "sbin" 3 vezes como deveria, mas não vai repetir os "sbin" recém-adicionado é no mesmo loop.

Após o segundo exemplo:

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

Sim, isso é certo, mas eu preciso adicionar ao mesmo loop :)
damekr

Use dois forloops então. Primeiro, execute suas adições e, em seguida, faça um loop sobre o resultado.
PSKocik

1
Não vejo por que você gostaria de acrescentar sbin no loop. Acrescentá-lo apenas uma vez tipo de faz mais sentido:array+=(sbin); for i in ...
PSkocik

becouse em loop for devo verificar se algum arquivo que está copiando por este loop for tem algum conteúdo ..
damekr

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

Isso irá percorrer sua lista, aderir sbinao final da lista de forma condicional e incluir sbinno conteúdo iterável.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.