3 pontos por GN⁺ 2023-11-24 | 1 comentários | Compartilhar no WhatsApp

Os interessantes binários dos sistemas Unix

  • Em sistemas Unix, existem binários cujo nome é um único símbolo.
  • Ao executar o comando /bin/[, é possível verificar a existência de um programa chamado [.
  • [ e test apontam para o mesmo binário, e os dois comandos na prática executam a mesma função.

Uso do programa test e de [

  • O programa test é usado para avaliar expressões no shell.
  • Ele é usado para comparação de strings, comparação de números, verificação de condições de arquivos etc.
  • test recebe argumentos, avalia a expressão e retorna 0 se for verdadeira e 1 se for falsa.

Motivo da existência dos dois comandos

  • O motivo de existirem os dois comandos, test e [, não é claro, mas supõe-se que seja para melhorar a legibilidade.
  • Ao usar o comando [, é possível expressar condicionais de forma mais limpa do que com test.
  • Ao usar [, o último argumento do comando deve terminar com ].

Diferença entre comandos embutidos e binários externos

  • Como test e [ são usados com frequência em scripts shell, eles são implementados como comandos embutidos na maioria dos shells.
  • O uso de comandos embutidos e de binários externos pode apresentar comportamentos diferentes, e também podem surgir diferenças conforme o shell.

Uso de [[ e suas diferenças

  • [[ é uma extensão do Bash que substitui o uso de [.
  • Como comando embutido, [[ pode alterar regras básicas da linguagem dentro da expressão.
  • [[ pode tratar padrões glob como literais em comparações de strings, produzindo resultados diferentes.

Escolha ao escrever scripts shell

  • Ao escrever scripts shell portáveis, é melhor usar [.
  • Se você estiver escrevendo scripts exclusivos para Bash, usar [[ oferece mais funcionalidades.

Combinação de expressões do shell com expressões test

  • O shell tem suas próprias expressões por meio dos operadores !, && e ||.
  • É possível combinar expressões test e expressões do shell em um único comando.

Opinião do GN⁺

O ponto mais importante deste texto é que, em sistemas Unix, [ e test existem como dois comandos diferentes que executam a mesma função, e supõe-se que isso sirva para melhorar a legibilidade e a eficiência dos scripts shell. Essas informações podem ser úteis para engenheiros de software iniciantes ao escrever ou entender scripts shell, além de ajudarem a compreender o funcionamento dos scripts shell e as diferenças entre vários shells. O que torna este texto interessante é que ele mostra como ferramentas básicas de scripts shell podem ser usadas de várias formas e evidencia bem a complexidade e a flexibilidade da programação em shell.

1 comentários

 
GN⁺ 2023-11-24
Comentários no Hacker News
  • Agradecimento do autor original e sugestão de ajuste no título

    O autor original agradece pela popularidade do texto e sugere adicionar o ano ao título, além de evitar o uso de maiúscula em "test", já que "test" se refere a um comando real.

  • História do comando "test" no shell Bourne e preferência pessoal

    Explica que o shell Bourne foi criado numa época sem IDEs, então o comando "test" era usado sem parênteses ou colchetes. Pessoalmente, diz preferir a forma com "test" em vez da forma com colchetes.

  • Exemplo de condicional sem usar bloco if

    Apresenta uma forma de escrever condicionais de maneira simples sem bloco if, mostrando um exemplo de saída de depuração enviada condicionalmente para stderr.

  • Como combinar bloco if com comandos comuns

    Mostra que blocos if podem testar comandos comuns e dá como exemplo uma busca em logs usando o comando grep.

  • Reflexão sobre usar operadores lógicos dentro do comando test

    Expressa dúvida sobre usar operadores lógicos dentro do comando test ou usar condicionais separadas. Afirma que, se não houver problema de desempenho, há razões válidas para ambas as abordagens.

  • Vantagens de usar o comando "test" e a conveniência de "man test"

    Afirma que, há alguns anos, vem defendendo o uso do comando "test" sem colchetes. Isso reforça que "test" é um comando simples e explica que usar "man test" é mais prático do que procurar em "man bash".

  • Atenção ao comportamento de argumento único em [ e test

    Alerta que, ao verificar se uma variável não está vazia, não colocá-la entre aspas pode levar a resultados inesperados. Enfatiza que a variável deve ser colocada entre aspas.

  • Diferença entre /bin/[ e /bin/test no Linux e no NetBSD

    Compartilha o fato de que, no Linux, /bin/[ e /bin/test são diferentes, mas no NetBSD são iguais.

  • Compartilhamento de links para uma exploração mais profunda de test/[/[[ e das esquisitices do shell

    Compartilha links para documentos que ajudam a entender melhor test, [, [[ e para um blog que explica várias características do shell.

  • Observação de que [[ é exclusivo do bash e recomendação de usá-lo se o uso de bash for certo

    Menciona que [[ é um comando exclusivo do bash e aconselha usar [[ quando houver certeza de que o bash será usado.

  • Confusão sobre a percepção de que [ não faz parte da linguagem de script do bash

    Expressa confusão ao entender que [ não é parte da linguagem de script do bash, mas apenas um programa, e pede uma explicação sobre isso.

  • Opinião forte sobre shell e oposição ao uso de [

    Expressa uma opinião forte de que não se deve usar [, e sim apenas "test". Enfatiza que [ parece sintaxe da linguagem, mas na verdade é um programa, e argumenta que a avaliação de strings deveria usar a instrução case.