O que é /usr/bin/[ e como posso usá-lo?

O que é /usr/bin/[ e como posso usá-lo?

Eu estava olhando coreutils e descobri que este era um dos arquivos incluídos como parte do coreutils: /usr/bin/[. O que é [e o que faz?

É um executável. Só não sei o que faz ou como usá-lo.

$ 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  

Quando tento executá-lo, acho que o padrão é a expansão de linha incorporada do bash. Em vez de realmente executar o arquivo.

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

Responder1

É equivalente ao comando test. (Veja info test.) Geralmente você usa isso em scripts em expressões condicionais como:

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

O colchete de fechamento é necessário para incluir a condicional. (Bem, parece que é necessário apenas ter uma aparência melhor no código. Alguém sabe alguma outra razão prática para isso?)

Responder2

É equivalente ao testcomando.

Em vez de

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

Você pode usar:

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

Também pode ser usado em loops:

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

Você também pode usá-los em linhas simples como esta:

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

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

informação relacionada