Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

executable nommé "["

9 réponses
Avatar
christian
Bonjour,

Quelqu'un sait-il à quoi sert /bin/[

~ $ ls -l /bin/[
-rwxr-xr-x 1 root root 24376 2006-06-25 03:59 /bin/[*

~ $ whatis [
grep: Expression régulière invalide
[: nothing appropriate

info et man et
http://packages.slackware.it/search.php?v=11.0&t=2&q=%5B
ne donnent rien non plus.
Google semble ignorer ce genre de caractère.

Merci de vos lumières

--
Christian

9 réponses

Avatar
Luc.Habert.00__arjf
christian :

Quelqu'un sait-il à quoi sert /bin/[


C'est un autre nom de /bin/test. Quand il est invoqué sous ce nom, il faut
lui donner un ] en dernier argument. Il sert à tester des choses dans un
script shell. Genre :

if [ "$A" -lt 5 ]; then ...; fi

Ça fait une syntaxe un peu plus sympa que

if test "$A" -lt 5; then ...; fi

. Enfin perso, j'utilise la seconde parce que je l'ai apprise en premier.

Avatar
christian
Luc Habert a écrit:

christian :

Quelqu'un sait-il à quoi sert /bin/[


C'est un autre nom de /bin/test. Quand il est invoqué sous ce nom, il
faut lui donner un ] en dernier argument. Il sert à tester des choses
dans un script shell. Genre :

if [ "$A" -lt 5 ]; then ...; fi



ok merci
je ne savais pas que les caractères spéciaux de bash pouvaient être des
executables

je vais étudier ça
http://abs.traduc.org/abs-4.2.01-fr/ch03.html#leftbracket
(chez moi /bin/[ n'est pas un lien vers /bin/test comme dit ici:
http://abs.traduc.org/abs-4.2.01-fr/ch07.html#ttestref
)

--
Christian


Avatar
YBM
ok merci
je ne savais pas que les caractères spéciaux de bash pouvaient être des
executables


En fait [ n'est absolument pas un caractère spécial (contrairement à ; (
) etc.). Dans bash c'est une commande interne (voir ci-dessous), donc
un if [ ... (ou un [ ... ] && ... ) va appeler cette commande qui a,
en gros, la même syntaxe que /usr/bin/test ou /usr/bin/[ :

$ type [ ; which [
[ is a shell builtin
/usr/bin/[
$ if [ coin = coin ] ; then echo coin ; fi
coin
$ if /usr/bin/[ coin = coin ] ; then echo coin ; fi
coin

Un shell plus minimaliste que bash pourrait très bien ne pas
avoir de commande interne [ que les mêmes scripts s'exécuteraient
de la même façon, juste un peu plus lentement à cause du
fork/exec de /usr/bin/[ à chaque if [ ...

Avatar
Luc.Habert.00__arjf
YBM :

En fait [ n'est absolument pas un caractère spécial


Si, dans les motifs.

Avatar
YBM
YBM :

En fait [ n'est absolument pas un caractère spécial


Si, dans les motifs.


Certes, donc [ n'est absolument pas un caractère spécial dans ce
contexte.


Avatar
Luc.Habert.00__arjf
YBM :

Certes, donc [ n'est absolument pas un caractère spécial dans ce
contexte.


Il suffirait qu'il y ait un crochet fermant plus loin dans le même mot pour
qu'il le devienne. Je trouve ton « absolument pas » absolument exagéré.

Avatar
Luc.Habert.00__arjf
Ce que je veux dire c'est qu'il faut aller voir plus loin que le caractère
pour décider de si il est spécial ou non. Je n'ai clairement pas envie
d'appeler ça un caractère absolument pas spécial.
Avatar
YBM
YBM :

Certes, donc [ n'est absolument pas un caractère spécial dans ce
contexte.


Il suffirait qu'il y ait un crochet fermant plus loin dans le même mot pour
qu'il le devienne. Je trouve ton « absolument pas » absolument exagéré.


[mode=enculage de mouche]

[ est justement suivi d'une espace (caractère spécial du shell) dans ce
contexte, ce qui exclu absolument qu'un ] soit présent dans le même mot
puisque le mot se termine et commence par [.

[/mode]


Avatar
Professeur M

En fait [ n'est absolument pas un caractère spécial (contrairement à ; (
) etc.). Dans bash c'est une commande interne


et là où je suis bluffé :

~$ man [

TEST(1) Commandes TEST(1)
NOM
test - Vérifier le type d’un fichier, et comparer des valeurs

;-)