Questão nº 43
Questão de Tecnologia da Informação · FGV TRF1 2024 (nº 43)
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:
- Auma vez;
- Btrês vezes;
- Cduas vezes; (alternativa correta)
- Dnenhuma vez, gerando erro;
- Enenhuma vez, sem gerar erro.
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:
alias echo3='echo -n TRF'define um alias. Em scripts executados diretamente (bash script.sh), aliases não são expandidos por padrão.function echo2 () { $echo1 }define uma função que executará o conteúdo da variável$echo1.echo1='echo TRF'atribui a string "echo TRF" à variávelecho1.$echo1expande paraecho TRFe executa, imprimindo "TRF" (1ª vez).echo2chama a função. Dentro dela,$echo1novamente expande paraecho TRFe executa, imprimindo "TRF" (2ª vez).echo3tenta executar o comandoecho3. Como é um alias e aliases não são expandidos em scripts não-interativos, o Bash procura por um comando literal chamadoecho3. 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.