Eu tenho uma lista de linhas em um script Bash da seguinte forma
if [ ! -z "$clone01" ]; then git clone "$clone01"; fi
if [ ! -z "$clone02" ]; then git clone "$clone02"; fi
if [ ! -z "$clone03" ]; then git clone "$clone03"; fi
# $clone01 .... through to ... $clone60
if [ ! -z "$clone60" ]; then git clone "$clone60"; fi
o zero à esquerda no final da variável, quando o número é menor que 10, é importante.
Eu tentei várias substituições e loops, etc. Este código é muito repetitivo e tem 60 linhas.
Como posso criar este código dinamicamente e torná-lo parte do meu script executado? Qual é a abordagem ótima para esse problema?
Ok, não faça isso, é feio. Coloque os URLs em uma matriz e faça um loop sobre ela:
ou coloque-os em um arquivo, um por linha, e faça um loop lendo as linhas. Aqui, pode ser útil proteger as linhas vazias, assim como você fez. Também podemos ignorar as linhas que começam com
#
comentários:Se você quiser o contador de linhas também, é fácil adicionar com expansões aritméticas .
Não use
eval
para fazer isso. Uma ferramenta muito melhor é a indireção variável :[[ $var ]]
faz o mesmo que[ ! -z "$var" ]
. Observe que armazenar 60 valores em 60 variáveis não é a melhor abordagem e você pode usar arrays para fazer isso.Você já tentou envolver seu if em um loop for como este?
Isso resulta na seguinte saída:
Então, algo assim parece que resolverá o problema:
Recursos úteis para isso:
http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-7.html
http://tldp.org/LDP/abs/html/varsubn.html