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



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?)


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

2
de bons exemples d'utilisation. "if / usr / bin / ["
nelaaro
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.