O Bash (Bourne-Again SHell) é o interpretador de linha de comando padrão na maioria dos sistemas Unix-like, como Linux e macOS. Dominar suas funcionalidades aumenta significativamente a produtividade de desenvolvedores, administradores de sistema e usuários avançados.
Este guia explora os recursos mais úteis do Bash para economia de tempo e reutilização de comandos — do histórico aos operadores de controle, com exemplos práticos para cada recurso.
Para quem busca um resumo rápido das funcionalidades essenciais:
!!, !$, !stringCtrl+r, Alt+., Ctrl+a/e, Ctrl+w/u/k/y$? (código de saída), $$ (PID da shell), $OLDPWD (diretório anterior){a,b} (chaves), ~ (diretório home), *, ?, [] (globbing) e autocompletar com Tabalias e lógicas mais complexas com funçõesfc: edite e reexecute comandos do histórico de forma interativa$(comando);, &&, ||, |, >, >>, <O histórico do Bash evita redigitação e acelera o fluxo de trabalho, permitindo recuperar e reutilizar comandos já executados.
| Comando | Descrição |
|---|---|
!! |
Repete o último comando executado na íntegra. Ex.: sudo !! |
!$ |
Expande para o último argumento do comando anterior. Ex.: mkdir /path/dir e depois cd !$ |
!^ |
Refere-se ao primeiro argumento do comando anterior |
!* |
Expande para todos os argumentos do comando anterior |
!n |
Executa o comando de número n da lista do history |
!string |
Executa o comando mais recente que começa com "string" |
!?string? |
Executa o comando mais recente que contém "string" |
O Bash utiliza a biblioteca Readline para gerenciar a entrada de linha de comando, oferecendo atalhos que facilitam a edição e a navegação.
| Atalho | Ação |
|---|---|
Ctrl+r |
Pesquisa incremental reversa no histórico |
Alt+. |
Insere o último argumento do comando anterior (pressione repetidamente para comandos mais antigos) |
Ctrl+a |
Move o cursor para o início da linha |
Ctrl+e |
Move o cursor para o fim da linha |
Ctrl+w |
Apaga a palavra anterior ao cursor |
Ctrl+u |
Apaga do cursor até o início da linha |
Ctrl+k |
Apaga do cursor até o fim da linha |
Ctrl+y |
Cola o texto apagado anteriormente (yank) |
Ctrl+l |
Limpa a tela do terminal (equivalente a clear) |
O Bash possui variáveis especiais que fornecem informações sobre o ambiente da shell e o status dos comandos executados.
| Variável | Descrição |
|---|---|
$? |
Código de saída (exit status) do último comando (0 = sucesso) |
$$ |
PID da própria shell atual |
$! |
PID do último comando executado em background |
$0 |
Nome do script ou shell em execução |
$n |
Argumentos posicionais passados a um script ($1, $2, ...) |
$# |
Número de argumentos posicionais passados |
$* e $@ |
Representam todos os argumentos posicionais (veja a diferença abaixo) |
$OLDPWD |
Diretório de trabalho anterior (usado por cd -) |
"$*" vs. "$@"Embora ambos representem todos os argumentos, o comportamento muda drasticamente entre aspas: "$@" preserva cada argumento como uma string separada — essencial para argumentos com espaços.
Considere o script test.sh:
#!/bin/bash
echo "Usando \"\$*\":"
for arg in "$*"; do
echo " - $arg"
done
echo
echo "Usando \"\$@\":"
for arg in "$@"; do
echo " - $arg"
done
Ao executar bash test.sh "arg1" "arg2 com espacos" "arg3", a saída demonstra a diferença:
Usando "$*":
- arg1 arg2 com espacos arg3
Usando "$@":
- arg1
- arg2 com espacos
- arg3
Conclusão:
"$@"trata cada argumento corretamente, enquanto"$*"os junta em uma única string. Em scripts, prefira sempre"$@".
Expansões são mecanismos do Bash que transformam padrões em listas de arquivos, caminhos ou outros valores.
| Padrão | Descrição |
|---|---|
{a,b} |
Expansão de chaves: mkdir pasta/{docs,images} cria pasta/docs e pasta/images |
~ |
Atalho para o diretório pessoal (home) do usuário atual |
* |
Corresponde a zero ou mais caracteres. Ex.: ls *.txt |
? |
Corresponde a exatamente um caractere. Ex.: ls arquivo?.txt |
[] |
Corresponde a um conjunto de caracteres. Ex.: ls [abc]*.txt |
Dica: o autocompletar com
Tab(tab completion) é uma forma de expansão interativa — completa comandos, nomes de arquivos e variáveis, economizando tempo e evitando erros de digitação.
Aliases são atalhos para comandos longos. Para torná-los permanentes, adicione-os ao ~/.bashrc.
# Cria o alias 'll' para listar arquivos com detalhes
alias ll='ls -laH'
# Remove o alias
unalias ll
Para automações mais complexas, as funções são mais adequadas: aceitam argumentos, têm lógica interna e são mais robustas que aliases. Esta função cria um diretório e já navega para ele em um único comando:
mkcd() {
mkdir -p "$1" && cd "$1"
}
Após adicioná-la ao ~/.bashrc, basta usar mkcd minha_nova_pasta.
fc (fix command)O fc permite editar e reexecutar comandos do histórico de forma interativa. Por padrão, abre o último comando no editor definido em $EDITOR.
fc — abre o último comando para edição e executa ao salvarfc -l 10 20 — lista os comandos do histórico de 10 a 20fc -s git — reexecuta o último comando que começou com gitA substituição de comandos usa a saída de um comando como argumento de outro. A sintaxe $(comando) é preferível às crases por ser mais legível e permitir aninhamento.
echo "Hoje é $(date +%F)"
# Saída: Hoje é 2026-02-24
Os operadores de controle combinam múltiplos comandos, definindo ordem e lógica de execução.
| Operador | Descrição |
|---|---|
; |
Executa em sequência, independentemente do sucesso |
&& |
AND lógico: executa o segundo apenas se o primeiro for bem-sucedido |
\|\| |
OR lógico: executa o segundo apenas se o primeiro falhar |
\| |
Pipe: envia a saída (stdout) de um comando para a entrada (stdin) de outro |
> |
Redireciona a saída para um arquivo, sobrescrevendo-o |
>> |
Redireciona a saída para um arquivo, anexando ao final |
< |
Redireciona o conteúdo de um arquivo para a entrada de um comando |
Atenção: o operador
>sobrescreve o conteúdo do arquivo de destino sem aviso. Para adicionar conteúdo ao final, use sempre>>.
Os recursos apresentados são uma amostra do poder do Bash. Incorporá-los ao fluxo de trabalho diário otimiza significativamente a interação com a linha de comando — a prática contínua abre novas possibilidades de automação e gerenciamento de sistemas.