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.


":" - O comando que não faz nada mas é muito importante

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)

Exemplo 1:

$ 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

Exemplo 2

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:

  • Como um comando vazio em estruturas de controle, como loops while ou for, quando nenhuma ação específica é necessária.
  • Como um placeholder para uma ação nula em construções condicionais, como if ou case.
  • Para adicionar comentários em scripts shell, já que o comando ":" não faz nada e o que vem depois dele em uma linha é efetivamente ignorado.

Exemplo 3:

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.

Conclusão

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.

Adicionar comentário

* Campos obrigatórios
5000
Powered by Commentics

Comentários

Nenhum comentário ainda. Seja o primeiro!


Veja a relação completa dos artigos de Rubens Queiroz de Almeida