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
Shuzheng
la source

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.

Michael Homer
la source
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.

hjk
la source
@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 .

dr_
la source
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