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 -F
I due comandi precedenti sono uguali.
Quando un'opzione assume un valore, sovrascrive il raggruppamento:In
gpg -aofoo.gpg
,-a
e-o
sono 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 -cvzf
anche 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/backups
tar xfvzO file.tgz /etc/passwd /var/backups
BSD
ps
utilizza sempre-
; SysVps
non 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 -u8
Questo imposta le opzioni
class
eu8
e disattiva ilvb
opzione.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.gpg
Questo imposta
-s
,-e
e--no-armor
(che è l'opposto di--armor
).Di solito,
--output=signed.gpg
e--output signed.gpg
sono 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/c
in stile VMS , altri ancora preferiscono/abc
in 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.