O que significa '[EXPRESSION], [] e [OPTION' em 'man test'?

8

Examinando man test , vejo que na sinopse de test estão as possibilidades test EXPRESSION e test .

O que significa [ EXPRESSION ], [ ] and [OPTION abaixo?

Por que os colchetes estão vazios e por que [OPTION erra um colchete? Alguém pode interpretar isso para mim?

NAME
       test - check file types and compare values

SYNOPSIS
       test EXPRESSION
       test

       [ EXPRESSION ]
       [ ]
       [ OPTION
    
por Shuzheng 21.08.2015 / 11:36

3 respostas

10

[ é outro nome para test . Todas essas três linhas são linhas de comando que executam test com algumas opções.

Na primeira linha, este é um teste padrão: [ 5 -gt 4 ] é o mesmo que test 5 -gt 4 .

No segundo, a expressão é omitida, o que significa sair do arquivo falso ( 0 arguments: Exit false (1) ).

Para o terceiro caso você está, eu acho, usando o GNU coreutils. No GNU test , o texto de ajuda contém esta nota:

NOTE: [ honors the --help and --version options, but test does not.
test treats each of those as it treats any other nonempty STRING.

Isso é uma extensão não-POSIX ; a motivação parece ser que test é necessário para tratar esses argumentos como strings como qualquer outro. [ é capaz de distinguir o caso de opção do caso de cadeia de caracteres pela presença do colchete ] de fechamento.

Observe que seu shell provavelmente fornecerá seu próprio [ e, portanto, você terá que usar /bin/\[ para usar essa versão.

    
por 21.08.2015 / 11:49
4

[ é o mesmo que test como um shell embutido em alguns shells.

Se você olhar mais abaixo man test , ele descreve quais são os EXPRESSION válidos com os quais você pode testar:

An omitted EXPRESSION defaults to false. Otherwise, EXPRESSION is true or false and sets exit status. It is one of: ...

Isso pode não ser aparente para você a partir da página do manual, mas em versões mais antigas / outras, [ e test estão disponíveis como comandos reais, o que significa que o espaço que você vê em [ EXPRESSION ] é < em> obrigatório para EXPRESSION ser aceito como um argumento para [ / test . Assim, mesmo para os shells que os oferecem como internos, eles mantêm este formato para compatibilidade.

E como explicado na resposta @ dr01 enquanto digito isso, o direito colchete é opcional.

    
por 21.08.2015 / 11:51
0

[ OPTION realmente não está faltando um colchete.

De fato, talvez surpreendentemente, [ é um comando (localizado em /usr/bin/[ ) equivalente a test . Portanto, era (pelo menos teoricamente) permitido usar apenas o suporte esquerdo, com o suporte direito servindo apenas como açúcar sintático. No entanto, as versões mais recentes do shell exigem .

    
por 21.08.2015 / 11:48

Tags