Esse loop funciona. Use Arrays.
$ for i in 1 2 3 4; do AR1_p1=22; AR1_p2=23; AR1_p3=24; AR1_p4=25; echo $((AR1_p$i)); done
22
23
24
25
Estou tentando imprimir um valor simples para $ AR1_p1, mas a variável $ i não está avaliando.
for i in 1 2 3 4
do
AR1_p1=22
AR1_p2=23
AR1_p3=24
AR1_p3=25
echo $AR1_p$i
done
É como concatenar dinamicamente. Alguma sugestão sobre como corrigir isso?.
Você pode usar referências indiretas bash para isso:
AR1_p1=22
AR1_p2=23
AR1_p3=24
AR1_p4=25
for i in 1 2 3 4
do
VARNAME="AR1_p${i}"
echo "${!VARNAME}"
done
Por comentário (s) sugerido, o array deve ser usado:
#!/bin/bash
AR1_p=(22 23 24 25)
for i in {1..4}
do
echo "${AR1_p[$i-1]}"
done
Use eval:
#!/bin/bash
AR1_p1=22
AR1_p2=23
AR1_p3=24
AR1_p4=24
for i in 1 2 3 4
do
eval echo \$AR1_p$i
done
echo expande apenas $ i. Quando esta expressão atinge eval, é como: $ AR1_p1. Eval tenta avaliar e dá o resultado.
POSIXly:
for i in 1 2 3 4
do AR1_p1=22
AR1_p2=23
AR1_p3=24
AR1_p4=25
echo "$((AR1_p$i))"
done
Um pouco menos confuso, talvez:
for i in 1 2 3 4
do echo "$((AR1_p$i=i+21))"
done
Ainda POSIXly, mas muito mais sensato:
i=0 n=21 l=4
while [ "$l" -ge "$((i+=1))" ]
do echo "$((AR1_p$i=i+n))"
done