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
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 !!
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
Você pode usar dois métodos se quiser manter seu exemplo:
eval expr \${L_$i} + $b
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.
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
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>
Tags bash