En la mayoría de los casos, [es una concha incorporada y es equivalente a test. Sin embargo, como test, también existe como un ejecutable independiente: eso es lo /bin/[que viste. Puede probar esto con type -a [(en un sistema Arch Linux, en ejecución bash):
$ type -a [
[ is a shell builtin
[ is /bin/[
Entonces, en mi sistema, tengo dos [: mi shell está integrado y el ejecutable en /bin. El ejecutable está documentado en man test:
TEST(1) User Commands TEST(1)
NAME
test - check file types and compare values
SYNOPSIS
test EXPRESSION
test
[ EXPRESSION ]
[ ]
[ OPTION
DESCRIPTION
Exit with the status determined by EXPRESSION.
[ ... ]
Como se puede ver en el extracto de la página del manual citado anteriormente, testy [son equivalentes. El /bin/[y /bin/testcomandos se especifica por POSIX razón por la cual los encontrará a pesar del hecho de que muchas conchas también les proporcionan como órdenes internas. Su presencia asegura que construcciones como:
[ "$var" -gt 10 ] && echo yes
funcionará incluso si el shell que los ejecuta no tiene [incorporado. Por ejemplo, en tcsh:
> which [
/sbin/[
> set var = 11
> [ "$var" -gt 10 ] && echo yes
yes
[builtin incorporado es solo un shell cuyos autores decidieron no agregar uno.tcshno tiene un[incorporado por ejemplo.bashes uno de los muchos programas (shells) que están diseñados para hacer trabajos similares. Bash es uno de los más populares, pero muchos sistemas se envían con diferentes shells predeterminados. Algunos de los más conocidos sonsh,bash,zsh,dash,ksh,tcsh,cshyfish. Puede ver los disponibles en su sistemacat /etc/shellsy una lista parcial aquí .shes,dashpero pensé que el sistema de rescate/bin/shno usa busybox. ¿Estás seguro?Eso se usa para pruebas de condición en scripts de shell. Otro nombre de este programa es
test:Eso parece una gramática de shell pero no lo es. Por
[lo general, es un shell incorporado, pero probablemente como respaldo existe como un comando externo.Ver el bloque "EXPRESIONES CONDICIONALES" en
man bash.fuente
[es el mismo comando quetest. En algunos sistemas * nix, uno es solo un enlace al otro. Por ejemplo, si ejecuta:verá la misma salida.
La mayoría de los sh-shells / posix-shells incluyen builtin
[ytestcomandos. Lo mismo es cierto paraecho. Hay un/bin/echocomando y un incorporado en la mayoría de los proyectiles. Esa es la razón por la que a veces sientes que, por ejemplo,echono funciona de la misma manera en diferentes sistemas.testo[devolver solo un código de salida de0o1. Si la prueba fue exitosa, el código de salida es 0.También puedes usar
[conif:Pero puede usarlo
ifcon cada comando,ifes para probar el código de salida. Por ejemplo:O, usando
if:Puede obtener el mismo resultado utilizando solo el
testcomando para probar el código de salida que se guarda en la variablestat:También puede usar
[[ ]]y(( ))para probar, pero no son lo mismo que[ytest, a pesar de tener casi la misma sintaxis:Finalmente, para descubrir qué es un comando, puede usar:
fuente
cmp /usr/bin/[ /usr/bin/testo quizás hashsha256sum /usr/bin/[ /usr/bin/testpero nostrings. En mi sistema (openSUSE Tumbleweed), por cierto, no son lo mismo (whyever).