O Bash Manual diz:
Quando o [formulário é usado, o último argumento para o comando deve ser 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 token, qual é o identificador de token ]
? PALAVRA ou NOME?
[
é (também) um comando auto-sustentado: -rwxr-xr-x 1 raiz raiz 39552 3 de dezembro 18:14 / usr / bin / [Embora seja possível que exista também um "paralelo" embutido, como existe para por exemplokill
. Em alguns sistemas, otest
comando é um link simbólico[
ou vice-versa. AFAIK,]
não significa nada por si só, mas é aceito para "fechar" um[
- mas é mais por uma razão "estética".[
é (também) um comando independente, ele geralmente possui uma página de manual ... Portanto, tenteman [
e / ouman test
([
etest
pode ser o mesmo comando).]
aspas simples ou duplas e você verá que não faz diferença; é apenas uma corda.Respostas:
]
complementa[
, é o sinal de[
comando final .Como a
man
página aponta, este é realmente um argumento para[
, mas o[
trata especialmente como o final.Você pode se parecer com outros padrões de fechamento de comando, por exemplo,
;
emfind .. exec
.fonte
]
?]
não é diferente de qualquer outro caractere normal neste contexto (como argumento para um comando). Otest
comando trata especialmente, mas isso depende do comando.[
gera um erro se seu argumento final não for exatamente igual a]
.O Bash não trata os caracteres
[
ou]
(por si só) de maneira diferente de uma letra do alfabeto.Nesse caso, o bash vê uma "palavra"
[
e procura um comando com esse nome. Se você procurar no seu sistema de arquivos, provavelmente descobrirá que/bin/[
(ou/usr/bin/[
) existe como um arquivo executável. Por acaso, o bash também fornece uma versão integrada (por uma questão de eficiência), mas isso é apenas um detalhe da implementação.O
[
comando (como em, o executável com esse nome), tem uma regra que deve ser o último parâmetro que você passa para ele,]
ou então gera um erro. Isso pode ser em parte porque é esteticamente agradável, mas também serve para protegê-lo contra comandos truncados acidentalmente, o que é bom.O fato de não serem especiais é por que você não pode omitir o espaço em branco antes e depois do
[
or]
.Exceções :
[
e]
ocorrer no formato correto dentro da mesma palavra, por exemplo[a-z]
, isso é especial e as regras de glashing do bash se aplicam.[[
comando é especial e pode fazer muitas coisas[
não (e os parâmetros internos[[ .. ]]
são processados de maneira diferente, assim como algumas quebras de linha). O correspondente]]
também é especial, pois é uma palavra reservada ao shell que não pode ser um nome de comando e finaliza o processamento especial que segue a[[
palavra - chave.fonte
;
ou>
, é apenas um comando interno comocd
. Em particular, se você digitar[x
, o[
não terá um significado especial.[
é um comando especial , não é um caractere especial .]]
é mais especial que]
. Ao usar[
e]
são apenas palavras. Se você o omitiu]
ou substituiu por uma palavra diferente, o bash ainda será executado[
, mas[
produzirá um erro. No entanto[[
e]]
são tratados especial na análise de tempo. Se você substituiu]]
por outra coisa, o bash relatará um erro de sintaxe. E se você omitiu o]]
bash, continuaria analisando a próxima linha procurando o]]
.Para simplificar as duas respostas anteriores,
]
é apenas uma string que[
requer execução.fonte