Questão nº 43

Questão de Tecnologia da Informação · FGV TRF1 2024 (nº 43)

FGV2024Analista Judiciário - Tecnologia da InformaçãoTecnologia da Informação
Gabarito: Cver comentário ↓

A analista Priscila escreveu o seguinte shell script no arquivo q03.sh:

#!/bin/bash
alias echo3='echo -n TRF'
function echo2 () {
  $echo1
}
echo1='echo TRF'
$echo1
echo2
echo3

Priscila executou o script acima em um terminal com o interpretador Bash, através do comando “bash q03.sh”.
Após a execução do comando, Priscila observou que a string “TRF” foi impressa na saída do terminal:

Resposta comentada

Gabarito Alternativa C

O Bash expande variáveis e executa seu conteúdo, e funções encapsulam blocos de código; aliases são atalhos que, por padrão, não são expandidos em scripts não-interativos.

Execução passo a passo:

  1. alias echo3='echo -n TRF' define um alias. Em scripts executados diretamente (bash script.sh), aliases não são expandidos por padrão.
  2. function echo2 () { $echo1 } define uma função que executará o conteúdo da variável $echo1.
  3. echo1='echo TRF' atribui a string "echo TRF" à variável echo1.
  4. $echo1 expande para echo TRF e executa, imprimindo "TRF" (1ª vez).
  5. echo2 chama a função. Dentro dela, $echo1 novamente expande para echo TRF e executa, imprimindo "TRF" (2ª vez).
  6. echo3 tenta executar o comando echo3. Como é um alias e aliases não são expandidos em scripts não-interativos, o Bash procura por um comando literal chamado echo3. Não encontrando, ele gera um erro "command not found" e não imprime "TRF".

Alternativas:
(A) Incorreta: A string "TRF" é impressa mais de uma vez.
(B) Incorreta: A string "TRF" não é impressa três vezes. A armadilha aqui é assumir que o alias echo3 seria expandido e executado, imprimindo "TRF" uma terceira vez. No entanto, aliases não são expandidos por padrão em scripts Bash executados de forma não-interativa (como bash q03.sh), a menos que a opção shopt -s expand_aliases seja explicitamente definida. Portanto, echo3 é tratado como um comando literal e falha, não imprimindo "TRF".
(C) Correta: A string "TRF" é impressa duas vezes: uma vez pela expansão direta de $echo1 e outra vez pela chamada da função echo2, que também expande e executa $echo1.
(D) Incorreta: A string "TRF" é impressa duas vezes antes de qualquer erro ocorrer.
(E) Incorreta: A string "TRF" é impressa duas vezes e um erro ocorre devido ao echo3 não ser um comando reconhecido.

Fonte: FGV TRF1 2024 Analista Judiciário - Tecnologia da Informação (Caderno Tipo 1). Reproduzida para fins de estudo.

Continue estudando

Estudar é izi

Pratique milhares de questões como esta, de graça, com explicação e gamificação no Quizinho.

Estudar de graça no Quizinho