O que é o identificador de token de ']'?

10

O Manual do Bash diz:

When the [ form is used, the last argument to the command must be a ].

$ type [
[ is a shell builtin
$ type ]
bash: type: ]: not found

Portanto, ] não é uma palavra reservada, nem é um operador, nem é um comando interno.

Como um token, qual é o identificador de token de ] ? PALAVRA ou NOME?

    
por Tim 16.03.2016 / 08:49

3 respostas

22

] complementa [ , é o sinal de fechamento do comando [ .

Como a página man aponta, este é na verdade um argumento para [ , mas [ acontece tratá-lo especialmente, como o final.

Você pode se parecer com alguns outros padrões de fechamento de comando, por exemplo ; in find .. exec .

    
por 16.03.2016 / 08:57
19

O Bash não trata os caracteres [ ou ] (por conta própria) diferentes de uma letra do alfabeto.

Nesse caso, o bash vê uma "palavra", [ , e procura um comando com esse nome. Se você olhar em seu sistema de arquivos, você provavelmente descobrirá que /bin/[ (ou /usr/bin/[ ) existe como um arquivo executável. Por acaso, o bash também fornece uma versão incorporada (por uma questão de eficiência), mas isso é apenas um detalhe de implementação.

O comando [ (como em, o executável com esse nome), tem uma regra que o último parâmetro que você passa para ele deve ser ] ou então gera um erro. Isso pode ser em parte porque é esteticamente agradável, mas também serve para protegê-lo de comandos truncados acidentalmente, o que é legal.

O fato de não serem especiais é o motivo pelo qual você não pode omitir o espaço em branco antes e depois do [ ou ] .

Exceções :

  • Quando [ e ] ocorrem no formato correto na mesma palavra, por exemplo [a-z] , então é especial e as regras globbing do bash se aplicam.
  • O comando [[ é especial e pode fazer muitas coisas [ não pode (e os parâmetros dentro de [[ .. ]] são processados de forma diferente, assim como algumas quebras de linha). O ]] correspondente também é especial, pois é uma palavra reservada do shell que não pode ser um nome de comando e finaliza o processamento especial que segue a palavra-chave [[ .
por 16.03.2016 / 13:25
3

Para colocar de forma mais simples do que as duas respostas anteriores, ] é apenas uma string que [ requer que seja executada.

    
por 16.03.2016 / 17:32

Tags