Não consigo entender os resultados do script bash

2

Aqui está o script:

    echo '1 2 3 4 5 6' | while read a b c ;do
    echo result: $c $b $a;
    done

O resultado é 3 4 5 6 2 1 Alguém pode explicar por quê?

    
por Hamideh 13.04.2015 / 11:24

2 respostas

4

Os dados finais na linha serão colocados na última variável, ou seja, c contém "3 4 5 6". Então você provavelmente quer:

echo '1 2 3 4 5 6' | while read a b c rest ;do
echo result: $c $b $a;
done

e ignore a variável rest .

    
por 13.04.2015 / 11:27
4

read divide cada linha de entrada padrão em palavras < href="https://www.gnu.org/software/bash/manual/bashref.html#Word-Splitting"> da mesma forma que seu shell faz quando você escreve comandos. Depois disso :

the first word is assigned to the first name, the second word to the second name, and so on, with leftover words and their intervening separators assigned to the last name

No seu caso, a recebe o valor 1, b recebe o valor 2 e c obtém o restante da linha "3 4 5 6". Você imprime c ( 3 4 5 6 ), depois b ( 2 ) e, em seguida, a ( 1 ), fornecendo a saída que você vê.

O loop não está fazendo nada neste caso, já que há apenas uma única linha para ler seu primeiro echo .

    
por 13.04.2015 / 11:28