comando de sequência e pergunta de teste

2

Aqui está uma questão de teste com a qual estou preso:

Qual saída a seguinte seqüência de comandos produzirá?

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

echo result: $c $b $a;
done

E a resposta correta é: 3 4 5 6 2 1

Eu não tenho idéia do porquê. Alguém pode me explicar isso?

(No começo eu pensei que a resposta fosse 3 2 1 .)

    
por Denny 21.04.2018 / 19:15

1 resposta

5

A partir da página de leitura:

Reads a single line from the standard input, or from file descriptor FD if the -u option is supplied. The line is split into fields as with word splitting, and the first word is assigned to the first NAME, the second word to the second NAME, and so on, with any leftover words assigned to the last NAME. Only the characters found in $IFS are recognized as word delimiters.

Por esse motivo, geralmente uso uma variável "lixeira" para coletar qualquer coisa que possa ser usada:

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

Em uso:

$ echo '1 2 3 4 5 6' | while read a b c TRASH; do
>     echo "result is: $c $b $a"
>     echo "trash is: $TRASH"
> done
result is: 3 2 1
trash is: 4 5 6
    
por 21.04.2018 / 19:21