¿Qué es / usr / bin / [y cómo lo uso?

26

Estaba buscando en coreutils y encontré esto como uno de los archivos incluidos como parte de coreutils: /usr/bin/[. ¿Qué es [y qué hace?

Es un ejecutable. Simplemente no sé qué hace ni cómo usarlo.

$ file / usr / bin / [
/ usr / bin / [: ELF ejecutable LSB de 32 bits, Intel 80386, versión 1 (SYSV), vinculado dinámicamente (usa libs compartidas), para GNU / Linux 2.6.15, despojado

Cuando trato de ejecutarlo, creo que está predeterminado en la expansión de línea integrada de bash. En lugar de ejecutar realmente el archivo.

$ "/ usr / bin / ["
/ usr / bin / [: missing ] ']' $ /usr/bin/\[
/usr/bin/[: missing

nelaaro
fuente
2
man [funciona en OS X.
Daniel Beck

Respuestas:

33

Es un equivalente del comando test. (Ver info test.) Generalmente lo usa en scripts en expresiones condicionales como:

if [ -n "$1" ]; then
    echo $1
fi

Se requiere el corchete de cierre para encerrar el condicional. (Bueno, parece que se requiere solo para verse mejor en el código. ¿Alguien sabe alguna otra razón práctica para ello?)

Rajish
fuente
3
Tenga en cuenta que [es tanto una cáscara incorporado y un programa externo con la misma (o similar) de uso. En bash, cuando corres [o testestás invocando el incorporado.
Grawity
Es obligatorio porque si fuera opcional, la sintaxis sería ambigua en ciertas situaciones.
Random832
20

Es equivalente al testcomando.

En lugar de

if /usr/bin/test -z "$VAR"
then
    echo VAR not set
fi

Puedes usar:

if /usr/bin/[ -z "$VAR" ]
then
    echo VAR not set
fi

También se puede usar en bucles:

i=0
while [ $i -lt 10 ]
do
   echo $i
   ((i++))
done

También puedes usarlos en frases como esta:

[ -z "$VAR" ] && echo VAR not set && exit

[ -f foo.txt ] && cat foo.txt
dogbane
fuente
2
buenos ejemplos de cómo usarlo. "if / usr / bin / ["
nelaaro