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

26

Je regardais coreutils et trouvé ce que l' un des fichiers inclus dans le cadre de coreutils: /usr/bin/[. Qu'est- [ce que c'est et que fait-il?

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

$ file / usr / bin / [
/ usr / bin / [: exécutable ELF 32 bits LSB, Intel 80386, version 1 (SYSV), lié dynamiquement (utilise des bibliothèques partagées), pour GNU / Linux 2.6.15, supprimé

Quand j'essaye de l'exécuter, je pense qu'il utilise par défaut l'expansion de ligne intégrée bash. Au lieu d'exécuter réellement le fichier.

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

nelaaro
la source
2
man [fonctionne sur OS X.
Daniel Beck

Réponses:

33

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

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

Le crochet de fermeture est nécessaire pour enfermer le conditionnel. (Eh bien, il semble que ce soit juste pour être plus joli dans le code. Quelqu'un connaît-il une autre raison pratique?)

Rajish
la source
3
Notez qu'il [s'agit à la fois d' un shell intégré et d'un programme externe avec la même utilisation (ou similaire). En bash, lorsque vous exécutez [ou que testvous invoquez le intégré.
grawity
Elle est obligatoire car si elle était facultative, la syntaxe serait ambiguë dans certaines situations.
Random832
20

C'est équivalent à la testcommande.

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é en boucles:

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

Vous pouvez également les utiliser dans des monolignes comme ceci:

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

[ -f foo.txt ] && cat foo.txt
dogbane
la source
2
de bons exemples d'utilisation. "if / usr / bin / ["
nelaaro