Como imprimir os valores das variáveis com números incrementados usando um loop no shell script?

0

Eu tenho um script Bash onde eu calculei muitos valores e os armazenei nas variáveis que têm um número para cada linha. Por exemplo, eu tenho uma variável chamada TC_5 que calcula o valor da quinta linha do arquivo csv de entrada. Eu calculei todos os valores e armazenei em variáveis que têm a convenção de nomenclatura de TC_<Row_No> , de modo que para 200 linhas eu tenha valores armazenados em:

TC_1
TC_2
.
.
TC_200

Agora, quero escrever um loop que possa imprimir os valores de todas essas variáveis juntas em um arquivo externo, em vez de imprimi-las manualmente. Para isso, estou usando o loop while da seguinte forma:

i=0
while [ "$i" != 201 ]
do
    echo "TC_$i" >> Out
    i='expr $i + 1'
done

Como posso modificar o código acima de forma que a instrução echo imprima a variável TC_<RowNo> no arquivo Out ?

    
por Ankit Vashistha 22.09.2015 / 09:42

1 resposta

2

Seu script atual ficou preso em um loop infinitivo, porque a condição [ "$i" != 201 ] sempre era verdadeira.

Você deve aumentar $i após cada iteração e usar eval para imprimir o conteúdo da variável TC_<RowNo> (mas não é seguro ):

i=1
while [ "$i" -ne 201 ]
do
    eval printf '%s\n' "\${TC_$i}"
    i=$((i+1))
done >> "Out"

Observe que $i começou em 1 , o uso de -ne para comparação de números inteiros e o redirecionamento no final de while loop.

    
por 22.09.2015 / 10:00