Que signifient «[EXPRESSION], [] et [OPTION» dans «test homme»?


8

En examinant man test, je vois que sous synopsis pour testsont les possibilités test EXPRESSIONet test.

Que [ EXPRESSION ], [ ] and [OPTIONsignifie ci-dessous?

Pourquoi les supports sont-ils vides et pourquoi [OPTIONmanque-t-il un support? Quelqu'un peut-il interpréter cela pour moi?

NAME
       test - check file types and compare values

SYNOPSIS
       test EXPRESSION
       test

       [ EXPRESSION ]
       [ ]
       [ OPTION

Réponses:


10

[est un autre nom pour test. Ces trois lignes sont des lignes de commande qui s'exécutent testavec certaines options.

Dans la première ligne, il s'agit d'un test standard: [ 5 -gt 4 ]c'est la même chose que test 5 -gt 4.

Dans le second, l'expression est omise, ce qui signifie quitter false ( 0 arguments: Exit false (1)).

Pour le troisième cas, vous utilisez, je suppose, des coreutils GNU. Dans GNU, testle texte d'aide contient cette note:

NOTE: [ honors the --help and --version options, but test does not.
test treats each of those as it treats any other nonempty STRING.

Il s'agit d' une extension non POSIX ; la motivation semble être la testnécessité de traiter ces arguments comme des chaînes comme les autres. [est capable de distinguer le cas d'option du cas de chaîne par la présence du ]crochet de fermeture .

Notez que votre shell fournira probablement le sien [, et vous devrez /bin/\[donc utiliser cette version.


4

[est identique à testun shell intégré à certains shells.

Si vous regardez plus bas man test, il décrit quelles sont les valeurs valides EXPRESSIONavec lesquelles vous pouvez tester:

Une EXPRESSION omise par défaut est false. Sinon, EXPRESSION est vrai ou faux et définit l'état de sortie. C'est un de: ...

Cela peut ne pas être évident pour vous depuis la page de manuel, mais dans les anciens / certains autres shells, les deux [et testsont disponibles en tant que commandes réelles, ce qui signifie que l'espace dans lequel vous voyez [ EXPRESSION ]est obligatoire pour EXPRESSIONêtre accepté comme argument pour [/ test. Ainsi, même pour les shells qui les proposent en tant que intégrés, ils conservent ce format pour des raisons de compatibilité.

Et comme expliqué dans la réponse de @ dr01 pendant que je tape ceci, le crochet droit est facultatif.


@don_crissti merci pour le heads-up, je pense que je vais simplement omettre cette dernière phrase ...
hjk

0

[ OPTION ne manque pas vraiment de support.

En fait, peut-être de façon surprenante, [est une commande (située dans /usr/bin/[) équivalente à test. Par conséquent, il était (au moins théoriquement) autorisé à utiliser uniquement le crochet gauche, le crochet droit servant de sucre syntaxique. Cependant, les nouvelles versions du shell l'exigent .


Y a-t-il d'autres différences entre celles- testci qui ne peuvent pas être utilisées avec une option (non répertoriées avec cette possibilité).
Shuzheng

1
Il n'est pas permis d'omettre la parenthèse droite, que ce soit dans POSIX ou GNU [.
Michael Homer

@MichaelHomer Oui. Corrigée.
dr_

Je ne sais pas ce que Bash a à voir avec ça ...
Michael Homer

1
@MichaelHomer, dans POSIX, le comportement si vous omettez le crochet droit n'est pas spécifié, donc un script POSIX n'est pas autorisé à omettre le ], mais un POSIX [peut faire ce qu'il veut, y compris vous appeler des noms et redémarrer la machine ou imprimer un message d'aide si vous l'appelez sans lui. Cela permet GNU grepd » [ --version. test --versionet [ --version ]cependant sont tenus de retourner true (test pour --versionêtre la chaîne non vide) et de ne rien produire.
Stéphane Chazelas
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.