A analista Priscila escreveu o seguinte shell script no arqu...

Próximas questões
Com base no mesmo assunto
Q3037058 Programação
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:


Alternativas

Gabarito comentado

Confira o gabarito comentado por um dos nossos professores

Gabarito: C

Fundamento decisivo: O ponto decisivo era o contexto de execução: em script Bash não interativo, o alias definido em echo3 não é expandido, enquanto a variável echo1 contém um comando que é executado quando aparece na posição de comando.

Tema central: Expansão de comandos no Bash
Análise das alternativas
A
Errada
Está errada porque não há apenas uma execução bem-sucedida de "echo TRF". O conteúdo de echo1 é executado no corpo principal e de novo dentro da função echo2.
B
Errada
Está errada porque a terceira impressão dependeria de echo3 acionar o alias definido com "echo -n TRF", e isso não ocorre no contexto informado. Em script Bash não interativo, o alias não é expandido nesse cenário.
C
Certa
A alternativa C está certa porque a linha echo1='echo TRF' faz com que $echo1 forme e execute o comando echo TRF, o que ocorre uma vez no corpo do script e outra dentro da função echo2, que apenas reexecuta o conteúdo de echo1. Já echo3 não acrescenta uma terceira impressão, pois o alias não é expandido nesse script Bash não interativo, sem habilitação explícita de expand_aliases.
D
Errada
Está errada porque, embora a linha echo3 possa gerar erro de comando não encontrado, isso acontece depois de duas execuções válidas de echo1. Portanto, não é verdade que "TRF" não foi impressa.
E
Errada
Está errada porque a string "TRF" é efetivamente impressa duas vezes pelas duas execuções de $echo1. Além disso, a base não autoriza dizer que não há erro, já que echo3 sem expansão de alias pode gerar comando inexistente.
Pegadinha da questão
A confusão real é supor que definir um alias no script basta para ele ser usado na linha echo3, quando o modo de execução informado não faz essa expansão; a outra armadilha é não perceber que a função apenas reexecuta o conteúdo de echo1.
Dica para questões semelhantes
  • Em script Bash não interativo, não conte alias como executado automaticamente sem verificar se há expansão de alias nesse contexto.
  • Quando uma variável aparece na posição de comando, verifique se seu conteúdo forma um comando executável.

Clique para visualizar este gabarito

Visualize o gabarito desta questão clicando no botão abaixo