Pular para o conteúdo principal

Questão de Programação — Linguagens de programação — VUNESP 2026

ProgramaçãoLinguagens de programação
Código
gp003721
Banca
VUNESP
Órgão
UNESP
Ano
2026
Cargo
V - - Analista de Informática I - Área de Atuação: Desenvolvimento de Sistemas - São Paulo
Observe a seguinte linha de código shell script executadano terminal (apresentada em duas linhas por questão deespaço): echo 1 2 3 4 5 | while read a b; doecho $b; doneÉ correto afirmar que o valor impresso no terminal comoresultado dessa linha de código será
  1. A1
  2. B1 2
  3. C3 4 5
  4. D2 3 4 5
  5. E1 2 3 4 5
Revelar gabarito e comentário

GabaritoD — 2 3 4 5

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Resolução

Gabarito: letra D — a conta chega a 2 3 4 5 — alternativa D.

A ideia por trás

O comando read é usado em shell script para ler uma linha da entrada padrão (que pode vir de um teclado, de um arquivo ou de outro comando via pipe) e dividir essa linha em campos, usando como separador o espaço, a tabulação ou a nova linha. Cada campo é atribuído a uma variável na ordem em que as variáveis são listadas após o read.

A regra central do read é: se você lista mais de uma variável, a primeira recebe o primeiro campo, a segunda recebe o segundo campo, e assim por diante, mas a ÚLTIMA variável recebe TODOS os campos restantes, não apenas o último. Isso significa que, com read a b, a variável a fica com o primeiro campo e a variável b fica com todos os campos do segundo em diante, juntos, separados por espaços.

Esta questão testa exatamente essa regra: o echo produz uma única linha com cinco campos, e o read a b distribui esses campos entre a e b. O laço while executa uma vez para cada linha lida, e como só há uma linha, o bloco roda uma única vez, imprimindo o conteúdo de b.

O que a questão dá

  • comando: echo 1 2 3 4 5 | while read a b; do echo $b; done

O que queremos: o valor impresso no terminal

Passo 1 — Entender o que o echo produz

O comando echo 1 2 3 4 5 simplesmente escreve na saída padrão a string '1 2 3 4 5', que é uma única linha com cinco campos separados por espaços. Essa linha será a entrada para o while.

linha:12345\boxed{\text{linha}: '1 2 3 4 5'}
NÃO CAIA NESSA!

Pensar que o echo gera cinco linhas separadas, mas ele gera uma única linha com cinco campos.

Passo 2 — Ver como o read distribui os campos

O pipe envia a linha para o while, e o comando read a b lê essa linha. O read divide a linha em campos usando espaços como separadores e atribui o primeiro campo à variável a e todos os campos restantes à variável b.

Por que esta fórmula: A regra do read é que a última variável recebe tudo o que sobrar. Como temos cinco campos e apenas duas variáveis, a recebe o primeiro campo e b recebe os quatro restantes.

a = '1', b = '2 3 4 5'

NÃO CAIA NESSA!

Achar que b recebe apenas o segundo campo, mas ele recebe todos os campos restantes.

Passo 3 — Executar o corpo do laço uma vez

O while read a b executa o bloco do...done uma vez para cada linha lida. Como a entrada tem apenas uma linha, o bloco roda uma única vez. Dentro do bloco, o comando echo $b imprime o conteúdo da variável b.

imprime2345\boxed{\text{imprime} '2 3 4 5'}
NÃO CAIA NESSA!

Pensar que o while itera sobre cada campo, mas ele itera sobre cada linha.

Resposta: 2 3 4 5 — alternativa D

Link permanente: /questoes/gp003721