Imprimindo valor de uma variável através de loops

0

Estou usando o loop for para imprimir as variáveis abaixo usando a declaração abaixo, mas não está imprimindo os valores corretamente. Está dando apenas o valor da iteração. Alguém pode me ajudar?

value1="1500067"
value2="1500068"
value3="1500069"
package1="CNN"
package2="FOX"
package3="Discovery"

for iteration in {1..3}
do
echo ""$value""$iteration" - "$package""$iteration""
done

Resultado esperado:

1500067 - CNN
1500068 - Fox
1500069 - Discovery
    
por Sandosh Kumar P 19.04.2018 / 23:45

2 respostas

3

Você deve usar arrays para esse tipo de tarefa:

#!/bin/bash
values=( 
    1500067
    1500068
    1500069
)
packages=( 
    CNN 
    FOX 
    Discovery
)

for (( i=0; i < ${#values[@]}; i++ )); do
    echo "${values[i]} - ${packages[i]}"
done

Ou, como você tem pares de valores-chave naturais, um array associativo

#!/bin/bash
declare -A packages=( 
    [1500067]=CNN 
    [1500068]=FOX 
    [1500069]=Discovery
)

for key in "${!packages[@]}"; do
    echo "$key - ${packages[$key]}"
done
    
por 20.04.2018 / 00:05
2

Consegui fazer isso usando o seguinte:

#!/bin/sh
value1="1500067"
value2="1500068"
value3="1500069"
package1="CNN"
package2="FOX"
package3="Discovery"

for i in {1..3}; do
    var1="value$i"
    var2="package$i"
    echo "${!var1} - ${!var2}"
done

Sua aspas duplas do comando echo são exageradas, você realmente não citou as variáveis por causa da maneira como foi configurado. Simplesmente envolvendo o argumento inteiro em um único par de citações é bom. Se você se deparar com uma situação em que precise refazer algo contra sua variável, é melhor usar colchetes para preservar seu nome:

${var1}_something_else

Lembre-se de que, apesar do #!/bin/sh hashbang, acredito que isso contenha alguns bash-isms {1..3} e as indiretas ${1var} . Ele funciona no meu sistema.

    
por 19.04.2018 / 23:50