Qu'est-ce que / usr / bin / [et comment puis-je l'utiliser?

Je regardais coreutils et je l'ai trouvé comme l'un des fichiers inclus dans coreutils: /usr/bin/[ . Qu'est-ce que [ et qu'est-ce qu'il fait?

C'est un exécutable. Je ne sais pas ce qu'il fait ou comment l'utiliser.

$ File / usr / bin / [
/ Usr / bin / [: ELF 32 bits LSB exécutable, Intel 80386, version 1 (SYSV), lié dynamiquement (utilise des libs partagées), pour GNU / Linux 2.6.15, dépouillé

Lorsque j'essaie de l'exécuter, je pense qu'il est en défaut pour l'extension de ligne construite bash. Au lieu d'exécuter le fichier.

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

C'est un équivalent du test commande. (Voir le info test .) Généralement, vous l'utilisez dans les scripts dans des expressions conditionnelles comme:

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

Le support de fermeture est nécessaire pour joindre le conditionnel. (Eh bien, il semble qu'il soit nécessaire de regarder plus agréablement dans le code. Quelqu'un connaît-il d'autres raisons pratiques pour cela?)

C'est équivalent à la commande test .

Au lieu de

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

Vous pouvez utiliser:

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

Il peut également être utilisé dans les boucles:

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

Vous pouvez également les utiliser dans un one-liners comme ceci:

 [ -z "$VAR" ] && echo VAR not set && exit [ -f foo.txt ] && cat foo.txt