acessando a variável de loop dentro de um loop

1
List = 1 2 3 4 5
for i in $LIST
do
sum='expr $l_$i + $b'
done

aqui l_1 , l_2 , l_3 , l_4 e l_5 são variáveis com alguns valores. Quando tento acessar esses valores dentro do loop for usando a variável de loop i , o valor de i está sendo substituído na expressão, ou seja, a instrução (1 + $b) está sendo executada em vez de ($l_1 + $b) . Eu tentei várias combinações de $ símbolo e também usei paranthesis mas nada parece estar funcionando. Por favor ajude !!

    
por Prashanth 02.06.2015 / 13:16

4 respostas

2

Em vez de usar l_i ou list as strings, use matrizes:

#! /bin/bash
b=11
l=(12 24 46 68 92)
for i in "${l[@]}" ; do
     ((sum=i+b))
     echo $sum
done
    
por 02.06.2015 / 13:27
1

Você pode usar dois métodos se quiser manter seu exemplo:

  1. usando eval: eval expr \${L_$i} + $b
  2. usando uma variável de referência: REF=L_$i; expr ${!REF} + $b;

Como o choroba mencionou bash é sensível a maiúsculas, então tenha cuidado com os nomes das variáveis.

    
por 02.06.2015 / 13:45
0
l_1=10 l_2=20 l_3=30 l_4=40 l_5=50
b=100
for i  in    1 2 3 4 5
do     echo "$((sum=l_$i+b))"
done

O valor de $sum é definido acima no shell atual - ele pode ser expandido ou modificado da maneira normal. Isso ocorre sem a sobrecarga de subshell / pipe necessária para chamar / forking expr e seu shell pai para cada iteração.

OUTPUT:

110
120
130
140
150

Ou, se você realmente quiser usar expr :

for i  in  1 2 3 4 5
do     sum='expr "$((l_$i))" + "$b"'
       echo "$sum"
done

OUTPUT:

110
120
130
140
150
    
por 02.06.2015 / 14:03
0

Eu não sou especialista em bash, mas aqui está o que eu criei

#!/bin/bash
 b=1
 l_1=1
 l_2=2
 l_3=3
 for i in '$l_'{1,2,3}
 do
   eval dvar="${i}"
   sum=$(($dvar + $b))
 done

A variável i do loop for será inicializada como '$ l_1', '$ l_2' e assim por diante. Chamar eval então avaliará o valor de i em dvar , que pode ser usado em uma expressão aritmética. / p>     

por 02.06.2015 / 14:23

Tags