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

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

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

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

$ file /usr/bin/[  
/usr/bin/[: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared  libs), for GNU/Linux 2.6.15, stripped  

Cuando intento ejecutarlo, creo que de forma predeterminada utiliza la expansión de línea incorporada de bash. En lugar de ejecutar realmente el archivo.

$ "/usr/bin/["
/usr/bin/[: missing ‘]’
$ /usr/bin/\[
/usr/bin/[: missing ‘]’

Respuesta1

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

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

El corchete de cierre es necesario para encerrar el condicional. (Bueno, parece que es necesario simplemente para que se vea mejor en el código. ¿Alguien conoce alguna otra razón práctica para ello?)

Respuesta2

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 utilizar en bucles:

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

También puedes usarlos en frases ingeniosas como esta:

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

[ -f foo.txt ] && cat foo.txt

información relacionada