'test' e '[' - binários diferentes, alguma diferença?

13

Constatei que, ao responder a outra pergunta, test e [ são binários diferentes, mas a% man_de% manpage extrai [ . Além da exigência de um final test , existe alguma diferença? Se não, por que eles são binários separados em vez de serem ligados por links simbólicos? (Eles também são ] builtins e bash também não mostram diferença.)

    
por Kevin 09.01.2012 / 17:58

2 respostas

4

O código-fonte explica a diferença de como ele lida com a opção --help .

  /* Recognize --help or --version, but only when invoked in the
     "[" form, when the last argument is not "]".  Use direct
     parsing, rather than parse_long_options, to avoid accepting
     abbreviations.  POSIX allows "[ --help" and "[ --version" to
     have the usual GNU behavior, but it requires "test --help"
     and "test --version" to exit silently with status 0.  */

Demonstrando

$ /usr/bin/test --help
$
$ /usr/bin/[ --help
Usage: test EXPRESSION
  or:  test
  or:  [ EXPRESSION ]
  or:  [ ]
  or:  [ OPTION
Exit with the status determined by EXPRESSION.
[...]

Na versão bash incorporada, a única diferença é que [ requer ] no final, como você disse.

    
por 05.05.2012 / 19:04
5

Normalmente, eles são o mesmo binário com links físicos. Dependendo do shell, uma implementação interna pode ser usada para os testes test e [ em vez do binário. Isso é mais eficiente em termos de desova do processo e pode fornecer opções diferentes do que o programa binário test fornece.

Além das diferenças no formato de chamada, ambas fornecem a mesma funcionalidade.

    
por 09.01.2012 / 18:42