De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
Colaboração: Rubens Queiroz de Almeida
Data de Publicação: 7 de maio de 2024
No shell bash do Linux, existe um comando que, à primeira vista, pode parecer
inútil: o comando :. Também conhecido como o comando null ou true, ele
não realiza nenhuma ação visível, mas retorna sempre um status de saída 0,
indicando sucesso. No entanto, apesar de sua aparente simplicidade, o comando
: desempenha um papel crucial em várias situações no shell scripting.
Quando você executa o comando : no terminal, nada acontece visualmente,
mas o shell considera que o comando foi executado com sucesso.
Internamente, o comando : é tratado como um caso especial pelo
shell bash. Ele é implementado como uma função interna do shell, e seu
comportamento é definido para simplesmente retornar um status de saída 0,
sem realizar nenhuma ação adicional.
No código-fonte da versão 5.2. do bash, o comando : é definido no
arquivo builtins/colon.def.
o comando : não faz nada, mas permite que a linha e os redirecionamentos sejam interpretados pelo bash, o que origina um grande parceiro das expansões de parâmetros, a variável $_ (sobre a qual diz o man bash: expands to the last argument to the previous simple command executed in the foreground, after expansion)
$ Nome="Rubens Queiroz" $ echo $Nome; echo $_ Rubens Queiroz Queiroz # O último parâmetro visto foi Queiroz $ echo "$Nome"; echo $_ Rubens Queiroz Rubens Queiroz # Agora as aspas fizeram com que o bash não interpretasse o espaço e visse tudo como um único parâmetro
Como não posso usar pipes em expansão de parâmetros, pois elas atuam
como variáveis e não como comandos, uso o $_ para passar a saída de uma com
a entrada da outra, como se fosse um pipe. Para pegar o mês em uma data:
$ Data=01/02/2024
$ : ${Data%/*} # Exclui à direita (%) a menor combinação possível com o padrão /* (/2024)
$ echo $_ # O $_ foi gerado pela interpretação da linha permitida pelo comando ':'
01/02
$ echo ${_#*/} # Exclui à esquerda (#) a menor combinação possível com o padrão */ (01/)
02
Além da expansão de parâmetros, o comando : também é usado em outras
situações no shell scripting:
while ou for, quando nenhuma ação específica é necessária.
if ou case.
while : do # Faça algo repetidamente # até que uma condição de saída seja atendida done
Nesse exemplo, o comando : é usado como um comando vazio no loop
while. O loop continuará executando indefinidamente até que uma
condição de saída seja atendida dentro do bloco do.
Exemplo de uso como um placeholder em uma construção condicional if:
if condição; then # Faça algo se a condição for verdadeira else : fi
Nesse exemplo, o comando : é usado como um placeholder no bloco else
da construção if. Se a condição não for verdadeira, nenhuma ação
será executada, mas a sintaxe do if ainda será válida.
O comando : pode parecer insignificante à primeira vista, mas desempenha
um papel fundamental em várias situações no shell scripting. Seu uso mais
comum é em expansão de parâmetros, permitindo fornecer valores padrão
para variáveis ou argumentos opcionais de forma concisa e elegante.
Além disso, o comando : também é útil como um comando vazio em
estruturas de controle, como loops e construções condicionais, e pode ser
usado para adicionar comentários em scripts shell.
Compreender o funcionamento interno do comando : e seus diversos usos
pode ajudar você a escrever scripts shell mais eficientes, flexíveis e
legíveis. Portanto, não subestime o poder do comando que "não faz nada"! O
comando : é uma ferramenta valiosa no seu arsenal de shell scripting.