Questão de Sistemas Operacionais — Scripts em Unix e Linux — VUNESP 2024
Sistemas Operacionais›Scripts em Unix e Linux
Código
vu212382
Banca
VUNESP
Órgão
Pref Santo André
Ano
2024
Cargo
ATI ( )
Um arquivo shell script com o nome script.sh é executado com o seguinte comando:
./script.sh 1 2 3
Dentro do arquivo existe a seguinte linha de código:
echo $@
É correto afirmar que o valor impresso por essa linha de código será:
Ascript.sh
B1
C3
D123
E1 2 3
Revelar gabarito e comentário▾
GabaritoE — 1 2 3
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 E — a conta chega a 1 2 3 — alternativa E.
A ideia por trás
Em shell script, os valores passados na linha de comando ficam guardados em variáveis especiais chamadas parâmetros posicionais. O primeiro argumento vai para $1, o segundo para $2, e assim por diante. Além deles, existem variáveis que representam o conjunto todo: $@ e $*. A variável $0 guarda o nome do script, e $# guarda a quantidade de argumentos.
A variável $@ expande para todos os argumentos, cada um como uma palavra separada. Quando usada sem aspas, o shell a substitui pela lista de argumentos separados por espaços. Já @" preserva cada argumento como palavra independente, enquanto "$*" junta tudo em uma única palavra. Nesta questão, como $@ está sem aspas, o resultado é simplesmente os argumentos separados por espaços.
A questão testa se você sabe o que $@ representa: não é o nome do script, nem um argumento isolado, nem a concatenação sem espaços, mas sim a lista completa de argumentos. Basta expandir $@ e ver o que o echo imprime.
O que a questão dá
comando de execução: ./script.sh 1 2 3
linha de código: echo $@
O que queremos: o valor impresso pela linha echo $@
Passo 1 — Identificar os argumentos passados ao script
Para saber o que $@ vai imprimir, primeiro precisamos saber quais argumentos foram passados. O comando ./script.sh 1 2 3 passa três argumentos: 1, 2 e 3. Eles ficam guardados em $1, $2 e $3.
NÃO CAIA NESSA!
Confundir $0 (nome do script) com os argumentos. $0 é ./script.sh, mas não é usado aqui.
Passo 2 — Expandir $@ para a lista de argumentos
Agora que sabemos quais são os argumentos, precisamos ver o que $@ faz com eles. $@ é uma variável especial que se expande para todos os argumentos, cada um como uma palavra separada, preservando os espaços entre eles. Isso é diferente de $1 (primeiro argumento), $# (quantidade) e $0 (nome do script).
NÃO CAIA NESSA!
Achar que $@ concatena os números sem espaços, como 123. Na verdade, ele preserva os espaços entre os argumentos.
Passo 3 — Ver o que o echo imprime com $@
O comando echo recebe a expansão de $@. Como $@ está sem aspas, o shell o substitui pela lista de argumentos separados por espaços: 1 2 3. O echo então imprime exatamente essa string.
NÃO CAIA NESSA!
Confundir com $# que daria 3, ou com $1 que daria 1. $@ é o conjunto todo.