Il più comune è GNU getopt stile, con un trattino per le opzioni brevi e due trattini per le opzioni lunghe.
-
Inizialmente, i programmi Unix accettavano opzioni di una sola lettera precedute da un singolo trattino e facoltativamente raggruppate:
ls -laF ls -l -a -FI due comandi precedenti sono uguali.
Quando un'opzione assume un valore, sovrascrive il raggruppamento:In
gpg -aofoo.gpg,-ae-osono opzioni efoo.gpgè il valore assegnato a-o. -
La maggior parte di loro lo ha fatto, comunque.
tar cvzfè uno spettacolo comune. Le versioni correnti accettanotar -cvzfanche e, a seconda che si aggiunga o meno il trattino, gli argomenti verranno interpretati in modi molto diversi. Ad esempio, questi due significano la stessa cosa (nota come le opzioni senza trattini non lo sono immediatamente prima del loro valore):tar -xf file.tgz -vzO /etc/passwd /var/backupstar xfvzO file.tgz /etc/passwd /var/backupsBSD
psutilizza sempre-; SysVpsnon lo fa mai. La versione Linux accetta entrambe le versioni e cambia il suo comportamento a seconda che un'opzione sia stata preceduta da un trattino. (A differenza dell'esempio precedente di tar, ps cambia l'opzione significati anche.) -
I programmi X11 utilizzavano opzioni lunghe precedute da un singolo trattino o talvolta da un segno più:
xterm -class FooTerm +vb -u8Questo imposta le opzioni
classeu8e disattiva ilvbopzione.Lo stile X11 non è compatibile con il raggruppamento di opzioni.
-
Successivamente, sono state aggiunte opzioni lunghe a GNU
getopt()in un modo compatibile con le opzioni di una lettera.gpg -se --no-armor --output=signed.gpgQuesto imposta
-s,-ee--no-armor(che è l'opposto di--armor).Di solito,
--output=signed.gpge--output signed.gpgsono equivalenti. (Ma non sempre, ad esempio curl non accetta il primo, solo il secondo.)(Se non ricordo male, le opzioni lunghe usavano
+come prefisso prima che fosse cambiato in--.) -
La specifica POSIX ha una sezione Utility Argument Syntax, che descrive le opzioni di un carattere.
La maggior parte dei programmi Windows utilizza i propri parser, facendo impazzire gli utenti.
- Alcuni richiedono
/a /b /c, altri consentono/a/b/cin stile VMS , altri ancora preferiscono/abcin stile Unix . - La maggior parte usa
/come prefisso, alcuni accettano anche-, altri accettano solo-. - I valori possono essere forniti come
/foo bar,/foo=bar,/foo:bar. - Di solito gli spazi possono essere
/quoted "like this", ma alcuni programmi accettano"come carattere letterale. (Questo è uno svantaggio di lasciare che il programma esegua la propria divisione delle parole; in Unix questo è gestito dalla shell.) - I programmi multipiattaforma possono utilizzare un'implementazione di
getopt.
Generalmente il primo si trova nei programmi più vecchi che sono troppo radicati per cambiare. Questo tipo di opzioni lunghe non è compatibile con lo standard getopt() funzione.
Il secondo stile è stato introdotto da GNU getopt_long() , ed è conforme agli standard esistenti che prevedono che il primo stile contenga opzioni brevi raggruppate (vale a dire, -orange dovrebbe significare -o -r -a -n -g -e ). Questo stile di opzione lunga è fortemente preferito.