[
es otro nombre para test
. Las tres líneas son líneas de comando que se ejecutan test
con algunas opciones.
En la primera línea, esta es una prueba estándar: [ 5 -gt 4 ]
es lo mismo que test 5 -gt 4
.
En el segundo, se omite la expresión, lo que significa salir de false ( 0 arguments: Exit false (1)
).
Para el tercer caso, supongo que está utilizando GNU coreutils. En GNU, test
el texto de ayuda contiene 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.
Esta es una extensión que no es POSIX ; La motivación parece ser que test
se requiere para tratar esos argumentos como cadenas como cualquier otro. [
es capaz de distinguir el caso de opción del caso de cadena por la presencia del ]
corchete de cierre .
Tenga en cuenta que su shell probablemente proporcionará el suyo [
, por lo que tendrá /bin/\[
que usar esta versión.
[ OPTION
Realmente no le falta un soporte.De hecho, quizás sorprendentemente,
[
es un comando (ubicado en/usr/bin/[
) equivalente atest
. Por lo tanto, (al menos en teoría) se le permitió usar solo el corchete izquierdo, con el corchete derecho sirviendo solo como azúcar sintáctica. Sin embargo, las nuevas versiones de shell lo requieren .fuente
test
no se pueden usar con una opción (no incluida en esa posibilidad)?[
.]
, pero un POSIX[
puede hacer lo que quiera, incluso llamarlo y reiniciar la máquina o imprimir un mensaje de ayuda si lo llamas sin eso Eso permite GNUgrep
's[ --version
.test --version
y,[ --version ]
sin embargo, deben devolver verdadero (prueba de--version
ser la cadena no vacía) y no mostrar nada.