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, test
y [
son equivalentes. El /bin/[
y /bin/test
comandos 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.tcsh
no tiene un[
incorporado por ejemplo.bash
es 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
,csh
yfish
. Puede ver los disponibles en su sistemacat /etc/shells
y una lista parcial aquí .sh
es,dash
pero pensé que el sistema de rescate/bin/sh
no 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
[
ytest
comandos. Lo mismo es cierto paraecho
. Hay un/bin/echo
comando y un incorporado en la mayoría de los proyectiles. Esa es la razón por la que a veces sientes que, por ejemplo,echo
no funciona de la misma manera en diferentes sistemas.test
o[
devolver solo un código de salida de0
o1
. Si la prueba fue exitosa, el código de salida es 0.También puedes usar
[
conif
:Pero puede usarlo
if
con cada comando,if
es para probar el código de salida. Por ejemplo:O, usando
if
:Puede obtener el mismo resultado utilizando solo el
test
comando 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/test
o quizás hashsha256sum /usr/bin/[ /usr/bin/test
pero nostrings
. En mi sistema (openSUSE Tumbleweed), por cierto, no son lo mismo (whyever).