Como posso enviar várias opções para uma variável?

2

Estou executando um loop para uma matriz de variáveis que gera mais três variáveis.

ou seja

for foo in ${bar[@]};
    do bar1=$(echo $foo | awk '{print$1}');
       bar2=$(echo $foo | awk '{print$2}');
       bar3=$(echo $foo | awk '{print$3}');
done

No entanto, quando o loop é concluído, eu preciso que as três variáveis recém-criadas se tornem matrizes para que eu possa executar loops também.

ou seja,

for foo in ${bar1[@]}
    do echo $foo
done

^^^^ isso deve mostrar várias linhas.

alguém pode fornecer de qualquer maneira para tornar isso possível?

    
por Xentrees 27.08.2015 / 02:07

2 respostas

1

Use

      bar1+=($(echo $foo | awk '{print$1}'))

ou seja, variable+=( value ) para adicionar um valor a uma matriz. É claro que o código para usar o array bar1 tem que ser parecido com

for foo in "${bar1[@]}"
do
    echo "$foo"
done

Claro que você deve sempre citar variáveis shell (por exemplo, "$foo" e "${bar1[@]}" ) a menos que você tenha um bom motivo para não e você está certo de que sabe o que está fazendo.

    
por 27.08.2015 / 02:19
0

Não há necessidade de três pipelines aqui; basta usar read para extrair os três primeiros campos da string.

for foo in "${bar[@]}"; do
    read bar1 bar2 bar3 the_rest <<< "$foo"
done

the_rest é necessário apenas se houver uma chance de que foo seja algo como "a b c d" e você não queira que bar3 seja definido como c d .

    
por 28.08.2015 / 07:34