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)
$1 → alfa (primeiro argumento)
$2 → beta (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 $@` 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