
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 test
comando.
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