Pular para o conteúdo principal

Questão de Sistemas Operacionais — Geral — VUNESP 2024

Sistemas OperacionaisGeral
Código
vu212413
Banca
VUNESP
Órgão
Pref Osasco
Ano
2024
Cargo
Ana ( )

O bash é um dos interpretadores de comando disponíveis para shell scripts no Linux. Dentre suas variáveis especiais, a variável que armazena uma string com todos os argumentos fornecidos ao executar o script é:

  1. A$0
  2. B$1
  3. C$*
  4. D$!
  5. E$$
Revelar gabarito e comentário

GabaritoC — $*

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”.

Variáveis especiais do bash

Gabarito: letra C. No bash, a variável $* armazena uma string com todos os argumentos fornecidos ao script, separados por espaços — exatamente o que o enunciado pede. As demais opções têm funções distintas: $0 é o nome do script, $1 é o primeiro argumento, $! é o PID do último processo em segundo plano e $$ é o PID do próprio shell.

O bash é o interpretador de comandos padrão na maioria das distribuições Linux, e quem escreve shell scripts precisa dominar as variáveis especiais que ele disponibiliza. Essas variáveis são preenchidas automaticamente pelo shell e fornecem informações sobre a execução do script, como os argumentos passados, o nome do script e o PID do processo. A confusão mais comum é entre $* e $@, que parecem idênticos, mas têm diferenças sutis quando usados entre aspas duplas: "$*" expande para uma única string com todos os argumentos separados por espaços, enquanto "$@" expande para cada argumento como uma palavra separada. Para a maioria dos usos simples, ambos funcionam, mas a distinção é cobrada em provas mais avançadas.

Vamos ver cada variável na prática. Suponha que você execute ./meuscript.sh alfa beta gama. Dentro do script:

  • $0./meuscript.sh (nome do script)

  • $1alfa (primeiro argumento)

  • $2beta (segundo argumento)

  • $*alfa beta gama (todos os argumentos em uma string)

  • $#3 (número de argumentos)

  • $$ → PID do processo do shell

  • $! → PID do último processo executado em segundo plano

A pegadinha da banca está em trocar $* por $@ ou por $0/$1. O candidato que decora apenas "eˊtodososargumentos"podeacertar,masquementendeadiferenc\caentre* é todos os argumentos" pode acertar, mas quem entende a diferença entre `* e $@` sai na frente. Guarde o mapa completo das variáveis especiais mais cobradas:

Variável

O que armazena

$0

Nome do script

$1, $2, ...

Argumentos individuais

$*

Todos os argumentos em uma string

$@

Todos os argumentos como palavras separadas

$#

Número de argumentos

$$

PID do shell atual

$!

PID do último processo em segundo plano

$?

Código de saída do último comando

Agora, analisemos cada alternativa.

Alternativa A — ❌ Incorreta

$0 armazena o nome do script (ou o nome do shell, se usado interativamente), não os argumentos. É a variável que identifica o próprio script sendo executado. Por exemplo, se o script for chamado com ./meuscript.sh, $0 será ./meuscript.sh. A banca coloca essa opção para confundir quem acha que $0 é o primeiro argumento — mas o primeiro argumento é $1.

Alternativa B — ❌ Incorreta

$1 armazena o primeiro argumento passado ao script, não todos eles. Se você executar ./script.sh arg1 arg2, $1 será arg1 e $2 será arg2. A alternativa erra ao generalizar: $1 é apenas um argumento específico, não a lista completa.

Alternativa C — ✅ Correta ⟵ GABARITO

$* expande para todos os argumentos fornecidos ao script, em uma única string, separados por espaços. É exatamente o que o enunciado descreve: "uma string com todos os argumentos fornecidos ao executar o script". No exemplo ./script.sh alfa beta gama, $* resulta em alfa beta gama. É a resposta certa.

Alternativa D — ❌ Incorreta

$! armazena o PID do último processo executado em segundo plano (com &). Não tem relação com os argumentos do script. É uma variável útil para monitorar processos assíncronos, mas não para acessar argumentos.

Alternativa E — ❌ Incorreta

$$ armazena o PID do processo atual do shell (o próprio script em execução). Também não tem relação com argumentos. É usado, por exemplo, para criar nomes de arquivos temporários únicos, mas não para acessar argumentos.

Gabarito: letra C

Link permanente: /questoes/vu212413