A shell colon (:) não faz nada. Usa-a na mesma.
O comando : no shell/bash não faz absolutamente nada. Mas é uma das ferramentas mais úteis que tens no teu arsenal de scripting. Descobre porquê.
Escrevo shell scripts há mais de 15 anos e ainda descubro coisas que me fazem sentir um novato. A última foi o comando : (dois pontos). Um builtin do shell que não faz absolutamente nada. E é exatamente por não fazer nada que é tão útil.
O artigo de Filip Roséen, publicado a 23 de julho e atualizado a 26 de julho de 2026, apareceu no Hacker News e gerou uma discussão interessante sobre as peculiaridades do shell scripting. Um comentário resumiu perfeitamente: “o : não faz nada, o que faz dele o único comando bash que um LLM não consegue over-engineerar”.
O que é o :
: é o null-command do POSIX — um builtin que avalia os seus argumentos e descarta o resultado. Está no shell desde 1971 (Thompson shell), onde também servia como label e como o primeiro marcador de comentários do Unix.
A magia não está no que o : faz — que é nada — mas no que podes fazer com o facto de ele avaliar argumentos enquanto não faz nada.
Validação de argumentos em uma linha
O uso que me fez parar tudo e reescrever vários scripts:
# Antes: 4 linhas
if [ -z "$1" ]; then
echo "missing argument, aborting." 1>&2
exit 1
fi
# Depois: 1 linha
: "${1:?missing argument, aborting.}"
O ${var:?diagnostic} é uma expansão de parâmetro POSIX. Se a variável não estiver definida ou estiver vazia, imprime o diagnóstico em stderr e o shell termina com status não-zero. O : engole o resultado da expansão.
Com variáveis com nome:
: "${GREET_NAME:?missing argument, aborting.}"
$ bash greet.sh
greet.sh: line 1: GREET_NAME: missing argument, aborting.
O próprio nome da variável aparece no erro. Isto é mais informativo e mais idiomático do que um if-statement manual.
Valores por omissão
O : também permite definir defaults sem efeitos secundários:
: "${DATA_DIR:=/var/data}" # define DATA_DIR se não estiver definida
: "${RETRIES:=3}" # e descarta o resultado
Sem o :, o shell tentaria executar /var/data como um comando. Com o :, a expansão é feita e o resultado descartado. É uma forma limpa de definir variáveis com defaults que não interfere com o fluxo normal do script.
Truncar ficheiros
: > error.log # trunca error.log
: > error.log > access.log # trunca ambos
O : não produz output, mas o redirecionamento > abre o ficheiro e trunca-o. O resultado é um ficheiro vazio. Mais limpo que echo -n > file ou true > file.
Placeholders e debugging
: funciona como placeholder para comandos que ainda vais escrever:
while : ; do
# fazer coisas
break
done
É um loop infinito legível. while true também funciona (hoje o true também é um builtin na maioria dos shells), mas o : é mais curto e existe desde o início.
Também serve para comentários multi-linha improvisados (embora : << 'EOF' ... EOF seja um here-document descartado, não um comentário verdadeiro).
O que aprendi
O : é uma daquelas ferramentas que não precisas — podes viver sem ela. Mas quando a conheces, começas a vê-la em todo o lado. Cada if-statement de validação de argumentos que escrevo agora parece desnecessariamente verboso.
O artigo do Roséen tem mais truques. Recomendo a leitura — mesmo que escrevas shell scripts há anos, aposto que aprendes alguma coisa.
Recursos adicionais
Partilhar
Comentários 0
Ainda sem comentários — sê o primeiro.