Como faço para baixar todos os arquivos listados em uma matriz?

3

Eu quero baixar todos os arquivos em este diretório do GitHub para /usr/share/enlightenment/data/config . Eu tenho este script:

L=('e.cfg' 'e_randr.cfg' 'exehist.cfg' 'module.battery.cfg' 'module.clock.cfg' 'module.conf.cfg' 'module.everything-apps.cfg' 'module.everything-files.cfg' 'module.everything.cfg' 'module.gadman.cfg' 'module.ibar.cfg' 'module.notification.cfg' 'module.pager.cfg' 'module.syscon.cfg' 'module.tasks.cfg')
pushd /usr/share/enlightenment/data/config
for i in $L
do
  sudo wget -c $JEF/$i #$JEF is defined in my ~/.bashrc script
done
popd

mas apenas faz o download de e.cfg e é isso.

    
por Brenton Horne 02.11.2015 / 05:10

3 respostas

0

Que tal isso? Menos citações, parethesis e colchetes e outras sintaxes!:

L='e.cfg e_randr.cfg exehist.cfg etc'

for i in $L
do
  echo wget -c "$JEF/$i" #$JEF is defined in my ~/.bashrc script
done

Esta é a maneira mais antiga e mais comum de fazer isso. Mais pessoas entendem isso. Arrays são extensões que eu nunca usei.

    
por 02.11.2015 / 06:04
6

Em bash ou ksh , é necessário iterar todos os elementos da matriz com:

for i in "${L[@]}"; do wget ....; done

${L[@]} será expandido para todos os elementos da matriz L e for é usado para iterar sobre esses.

Se você usar $L é bash ou ksh , ele se comportará como ${L[0]} , ou seja, no seu caso, você obterá apenas o primeiro elemento da matriz.

    
por 02.11.2015 / 05:14
1

Eu mesmo descobri a resposta olhando as variáveis de matriz em Guia para Iniciantes de Bash.

Isso é o que o script deve ser:

L=('e.cfg' 'e_randr.cfg' 'exehist.cfg' 'module.battery.cfg' 'module.clock.cfg' 'module.conf.cfg' 'module.everything-apps.cfg' 'module.everything-files.cfg' 'module.everything.cfg' 'module.gadman.cfg' 'module.ibar.cfg' 'module.notification.cfg' 'module.pager.cfg' 'module.syscon.cfg' 'module.tasks.cfg')
pushd /usr/share/enlightenment/data/config
for i in ${L[*]}
do
  sudo wget -c $JEF/$i
done
popd
    
por 02.11.2015 / 05:16