Bash Manual dice:
Cuando se utiliza el [formulario, el último argumento para el comando debe ser a].
$ type [
[ is a shell builtin
$ type ]
bash: type: ]: not found
Entonces, ]
no es una palabra reservada, ni es un operador, ni es un comando incorporado.
Como token, ¿cuál es el identificador de token ]
? ¿PALABRA o NOMBRE?
[
es (también) un comando autosuficiente: -rwxr-xr-x 1 root root 39552 3 de diciembre 18:14 / usr / bin / [Aunque es posible que también haya una función "paralela" incorporada, como la hay para por ejemplokill
. En algunos sistemas, eltest
comando es un enlace simbólico[
o viceversa. AFAIK,]
no significa nada en sí mismo, pero se acepta "cerrar" a[
, pero es más por razones "estéticas".[
es (también) un comando autónomo, generalmente tiene una página de manual ... Así que intenteman [
y / oman test
([
ytest
puede ser el mismo comando).]
comillas simples o dobles y verá que no hay diferencia; Es solo una cuerda.Respuestas:
]
Complementos[
, es el signo de[
mando de cierre .Como
man
señala la página, esto es realmente un argumento para[
, pero[
resulta tratarlo especialmente, como el final.Puede parecerse a él con algunos otros patrones de cierre de comandos, por ejemplo
;
enfind .. exec
.fuente
]
?]
no es diferente de cualquier otro personaje normal en este contexto (como argumento para un comando). Eltest
comando lo trata especialmente, pero eso depende del comando.[
genera un error si su argumento final no es exactamente igual a]
.Bash no trata los caracteres
[
o]
(por sí solos) de manera diferente a una letra del alfabeto.En este caso, bash ve una "palabra"
[
, y busca un comando con ese nombre. Si observa su sistema de archivos, probablemente encontrará que/bin/[
(o/usr/bin/[
) existe como un archivo ejecutable. De hecho, bash también proporciona una versión integrada (en aras de la eficiencia), pero eso es solo un detalle de implementación.El
[
comando (como en, el ejecutable con ese nombre), tiene una regla de que el último parámetro que debe pasar es]
o de lo contrario arroja un error. Esto puede deberse en parte a que es estéticamente agradable, pero también sirve para protegerlo de comandos truncados accidentalmente, lo cual es bueno.El hecho de que estos no sean especiales es la razón por la que no puede omitir el espacio en blanco antes y después de
[
o]
.Excepciones :
[
y]
ocurra en el formato correcto dentro de la misma palabra, por ejemplo[a-z]
, eso es especial y se aplican las reglas globales de bash.[[
comando es especial y puede hacer muchas cosas[
que no puede (y los parámetros en el interior[[ .. ]]
se procesan de manera diferente, al igual que algunos saltos de línea). El correspondiente]]
también es especial, ya que es una palabra reservada de shell que no puede ser un nombre de comando y finaliza el procesamiento especial que sigue a la[[
palabra clave.fuente
;
o>
, es solo un comando incorporado comocd
. En particular, si escribe[x
, el[
no tiene un significado especial.[
es un comando especial , no es un personaje especial .]]
es más especial que]
. Cuando se usan[
y]
son solo palabras. Si lo omitió]
o lo reemplazó con una palabra diferente, bash seguirá ejecutándose[
, pero[
producirá un error. Sin embargo[[
y]]
son tratados especiales en el momento del análisis. Si lo reemplazó]]
con algo más, bash informará un error de sintaxis. Y si omite]]
bash, seguiría analizando la siguiente línea buscando el]]
.Para decirlo de manera más simple que las dos respuestas anteriores,
]
es solo una cadena que[
requiere ejecutarse.fuente