Che cosa significano `[ESPRESSIONE], [] e [OPZIONE` in` man test`?


8

Esaminando man test, vedo che sotto la sinossi testsono le possibilità test EXPRESSIONe test.

Cosa [ EXPRESSION ], [ ] and [OPTIONsignifica sotto?

Perché le parentesi sono vuote e perché [OPTIONmanca una parentesi? Qualcuno può interpretarlo per me?

NAME
       test - check file types and compare values

SYNOPSIS
       test EXPRESSION
       test

       [ EXPRESSION ]
       [ ]
       [ OPTION

Risposte:


10

[è un altro nome per test. Tutte e tre queste righe sono righe di comando eseguite testcon alcune opzioni.

Nella prima riga, si tratta di test standard: [ 5 -gt 4 ]è lo stesso di test 5 -gt 4.

Nel secondo, l'espressione è omessa, il che significa uscire da false ( 0 arguments: Exit false (1)).

Per il terzo caso, suppongo, stai usando i coreutils GNU. In GNU testil testo della guida contiene questa nota:

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

Questa è un'estensione non POSIX ; la motivazione sembra essere quella testnecessaria per trattare tali argomenti come stringhe come le altre. [è in grado di distinguere la custodia opzionale dalla custodia stringa per la presenza della ]parentesi quadra di chiusura .

Nota che probabilmente la tua shell ne fornirà una sua [, quindi dovrai /bin/\[usare questa versione.


4

[è lo stesso di testuna shell incorporata in alcune shell.

Se guardi più in basso man test, descrive quali sono i validi con EXPRESSIONcui puoi provare:

Un'ESPRESSIONE omessa per impostazione predefinita è falsa. Altrimenti, EXPRESS è vero o falso e imposta lo stato di uscita. È uno di: ...

Questo potrebbe non essere evidente nella pagina man, ma nelle vecchie / alcune altre shell, entrambe [e testsono disponibili come comandi effettivi, il che significa che lo spazio in cui vedi [ EXPRESSION ]è obbligatorio per EXPRESSIONessere accettato come argomento per [/ test. Pertanto, anche per le shell che li offrono come built-in, mantengono questo formato per compatibilità.

E come spiegato nella risposta di @ dr01 mentre sto scrivendo, la parentesi quadra destra è opzionale.


@don_crissti grazie per l'heads-up, penso che ometterò semplicemente quell'ultima frase ...
hjk

0

[ OPTION non manca davvero una parentesi.

In effetti, forse sorprendentemente, [è un comando (situato in /usr/bin/[) equivalente a test. Pertanto era (almeno teoricamente) permesso usare solo la parentesi sinistra, con la parentesi destra che serviva proprio come zucchero sintattico. Tuttavia, le versioni più recenti della shell lo richiedono .


Esistono altre differenze tra queste che testnon possono essere utilizzate con un'opzione (non elencata con quella possibilità).
Shuzheng,

1
E ' non è consentito omettere la staffa destra, sia in POSIX o GNU [.
Michael Homer,

@MichaelHomer Sì. Corretto.
dr_

Non sono sicuro di cosa Bash abbia a che fare con questo ...
Michael Homer,

1
@MichaelHomer, in POSIX, il comportamento se si omette la parentesi destra non è specificato, quindi uno script POSIX non è autorizzato a omettere il ], ma un POSIX [può fare quello che vuole incluso chiamare i nomi e riavviare la macchina o stampare un messaggio di aiuto se lo chiami senza di essa. Ciò consente GNU grep's [ --version. test --versione [ --version ]tuttavia sono richiesti per restituire true (test per --versionessere la stringa non vuota) e non produrre nulla.
Stéphane Chazelas,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.