Declarando variáveis

No Bash, variáveis são criadas por atribuição direta. Não pode haver espaços ao redor do =.

NOME="Linux Labs"
VERSAO=6
readonly PI=3.14

O comando declare permite definir atributos. Use -i para inteiros, -r para somente leitura e -a para arrays.

declare -i CONTADOR=0
CONTADOR+=5
echo $CONTADOR
5

export e escopo

Variáveis comuns existem apenas no shell atual. Para que processos filhos as enxerguem, use export.

LINGUAGEM="pt_BR.UTF-8"
export LINGUAGEM

# ou em uma linha:
export EDITOR="vim"

Para verificar todas as variáveis exportadas:

export -p | head -5
declare -x EDITOR="vim"
declare -x HOME="/root"
declare -x LANG="pt_BR.UTF-8"
declare -x LINGUAGEM="pt_BR.UTF-8"
declare -x PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin"

Expansão de variáveis

Existem várias formas de expandir o valor de uma variável:

ARQUIVO="relatorio"

echo $ARQUIVO          # simples
echo ${ARQUIVO}.log    # com sufixo (evita ambiguidade)
echo ${ARQUIVO:-vazio} # valor padrão se não definida
echo ${#ARQUIVO}       # comprimento da string
relatorio
relatorio.log
relatorio
10

Substituição de comando

Use $(comando) para capturar a saída de um comando dentro de uma variável. A sintaxe com crases `comando` ainda funciona, mas é desencorajada.

HOJE=$(date +%Y-%m-%d)
KERNEL=$(uname -r)
USERS_LOGADOS=$(who | wc -l)

echo "Data: $HOJE | Kernel: $KERNEL | Usuários: $USERS_LOGADOS"
Data: 2026-03-27 | Kernel: 6.6.87-generic | Usuários: 3

Variáveis especiais

O Bash disponibiliza variáveis especiais que são essenciais em scripts:

echo $?   # código de saída do último comando
echo $$   # PID do shell atual
echo $!   # PID do último processo em background
echo $#   # número de argumentos do script
echo $@   # todos os argumentos (como palavras separadas)
echo $0   # nome do script

Exemplo prático em um script:

#!/bin/bash
echo "Script: $0"
echo "Argumentos recebidos: $#"
echo "Primeiro: $1 | Segundo: $2"
echo "Todos: $@"
$ ./info.sh alfa beta gama
Script: ./info.sh
Argumentos recebidos: 3
Primeiro: alfa | Segundo: beta
Todos: alfa beta gama

Aspas simples vs duplas

Essa distinção é fundamental e fonte de muitos bugs.

DISTRO="Debian"

echo "Eu uso $DISTRO"    # expande a variável
echo 'Eu uso $DISTRO'    # literal, sem expansão
Eu uso Debian
Eu uso $DISTRO

Aspas duplas preservam espaços e expandem variáveis. Aspas simples tratam tudo como texto literal.

Dica: Sempre use aspas duplas ao redor de "$VAR" para evitar problemas com word splitting e globbing. A exceção é quando você intencionalmente quer que o shell divida a string em palavras.