function f1 { VAR="Teste" } f2() { p1=$ 1 p2=$ 2 soma=$ ( ($ {p1}*3 + $ {p2}*2) ) echo $ {soma} } f1 echo $ {VAR} valor="$ (f2 1 2)" echo valor = $ valor meuvalor="$ (f2 10 -2)" echo meuvalor = $ meuvalor Ao ser executado, o script Linux apresentado anteriormente apresentará o seguinte resultado.
- A)valor = 7 meuvalor = 26
Errada, porque `valor` vale 7, mas `meuvalor` nao pode ser 26 se a conta em `f2 10 -2` for lida corretamente.
- B)valor = 3 meuvalor = -8
Errada, porque `valor` nao e 3 e `meuvalor` nao e -8; os argumentos entram em `$1` e `$2` e a expressao faz a conta inteira.
- C)Teste valor = 3 meuvalor = -8
Errada, porque `f1` deixa `VAR` visivel fora da funcao, e os valores de `valor` e `meuvalor` tambem nao batem com a saida real.
- D)Teste valor = 7 meuvalor = 26
Certa, porque `VAR` permanece definido apos `f1`, `f2 1 2` produz 7 e `f2 10 -2` produz 26.
Gabarito: D
Em shell script, uma funcao pode alterar variaveis do ambiente atual se voce nao usar `local`. Aqui, `f1` atribui `VAR="Teste"`, entao depois do comando `f1` o `echo ${VAR}` mostra `Teste`. Sem misterio, sem magia, apenas escopo global trabalhando a favor do script. Na funcao `f2`, os parametros entram por `$1` e `$2`. O calculo `soma=$((p1*3 + p2*2))` faz conta inteira no Bash, e o resultado vai para a saida padrao com `echo ${soma}`. Assim, `f2 1 2` gera `7`, porque `1*3 + 2*2 = 7`. Depois, `valor="$(f2 1 2)"` faz substituicao de comando: tudo que `f2` imprimir vira texto armazenado em `valor`. Por isso a linha imprime `valor = 7`. O mesmo vale para `meuvalor="$(f2 10 -2)"`, que resulta em `10*3 + (-2)*2 = 26`, entao a saida e `meuvalor = 26`. Em questoes de Bash, a banca costuma testar tres coisas ao mesmo tempo: variavel global, passagem de parametros e substituicao de comando. A alternativa D e correta porque junta exatamente esses efeitos na ordem em que o script executa.