Non esiste uno standard diffuso. C'è una certa coerenza ad es. nei programmi GNU, ma devi controllare la documentazione di ciascun programma.
Citando Wikipedia, corsivo mio:
Nei sistemi simili a Unix, il trattino ASCII-meno è comunemente usato per specificare le opzioni. Il carattere è generalmente seguito da una o più lettere . Un argomento che è un singolo trattino meno di per sé senza alcuna lettera di solito specifica che un programma dovrebbe gestire i dati provenienti dallo standard input o inviare dati allo standard output. Su alcuni programmi vengono utilizzati due caratteri meno trattino ( -- ) per specificare "opzioni lunghe" dove vengono utilizzati nomi di opzioni più descrittivi . Questa è una caratteristica comune del software GNU.
Di solito, i trattini indicano un argomento predefinito. Penso che sia usato per differenziarli da es. nomi di file o altre etichette che potresti utilizzare come argomenti. Tuttavia, non è sempre così (vedi sotto).
Troverai spesso lo stesso argomento disponibile sia come opzione breve che lunga, come ad es. in ls.
Alcuni programmi usano un singolo trattino per le opzioni di un carattere e due trattini per le opzioni di più caratteri, ma non tutti (GNU find
viene in mente). Alcuni programmi hanno trattini opzionali o li saltano del tutto (tar
o BSD ps
mi viene in mente).
A volte opzioni lunghe (--foo
) richiedono argomenti, mentre le opzioni brevi (-f
) non lo fanno (o almeno implicano uno specifico argomento predefinito).
Opzioni brevi (ad es. cut -d ' '
) può avere argomenti , mentre le opzioni lunghe (ad es. ls --all
) non li hanno necessariamente.
Per impostare un particolare comportamento di un programma, a volte devi usare un'opzione breve, per altri devi usare un'opzione lunga e per alcuni hai una scelta.
In una nota correlata, alcuni programmi non possono gestire spazi bianchi tra un'opzione e il suo argomento, mentre altri no.
Come ho scritto all'inizio, semplicemente non esiste un comportamento o uno standard comune. Spesso puoi rintracciare un comportamento simile alla stessa libreria utilizzata per l'analisi degli argomenti, ma probabilmente non vorrai leggere le fonti per scoprirlo.
Non puoi davvero dedurre la sintassi degli argomenti di un programma da quella di un altro.
Se consideri anche Windows, le cose peggiorano ancora:mentre le chiamate della riga di comando di Windows usano tradizionalmente /f
(almeno la maggior parte delle volte, singoli caratteri) per le opzioni, con :
come separatore tra le opzioni e il loro valore (vedi ad esempio qui); Le utilità multipiattaforma sono molto diffuse (come quelle che citi) e portano con sé la più comune sintassi del trattino per gli argomenti, con tutte le incoerenze sopra menzionate.
Basta fare ls --help
e guarda le opzioni; dovrebbe esserti ovvio.
Non ha assolutamente nulla a che fare con i parametri. Molte opzioni hanno una forma breve e una forma lunga, e molte ne hanno una e non l'altra.
Inoltre, per quanto riguarda i parametri, è semplicemente che nella forma estesa quando prendono un parametro sembra che sia sempre con un uguale. Ma ovviamente quelli corti possono prendere parametri altrettanto; solo che non usano un uguale.
Ecco un estratto da ls --help
(man ls
fornisce informazioni equivalenti). Nota come alcuni hanno una forma lunga senza una forma breve (--author
, --block-size
), alcuni hanno una forma breve senza una forma lunga (-c
, -f
, -g
), e alcuni hanno sia una forma lunga che una forma breve (-A
/--almost-all
, -b
/--escape
).
-a, --all do not ignore entries starting with .
-A, --almost-all do not list implied . and ..
--author with -l, print the author of each file
-b, --escape print octal escapes for nongraphic characters
--block-size=SIZE use SIZE-byte blocks
-B, --ignore-backups do not list implied entries ending with ~
-c with -lt: sort by, and show, ctime (time of last
modification of file status information)
with -l: show ctime and sort by name
otherwise: sort by ctime
-C list entries by columns
--color[=WHEN] control whether color is used to distinguish file
types. WHEN may be `never', `always', or `auto'
Questa è una convenzione proveniente da *nix. Il doppio trattino precede le opzioni quando sono scritte per intero , , mentre il trattino singolo precede le opzioni quando sono scritte in forma abbreviata . Ad esempio ls --all --l
, può essere abbreviato in ls -al
. Come si vede, non tutte le opzioni hanno i loro equivalenti a lettera singola, anche se di solito le più usate lo hanno.
Il fatto che l'opzione accetti un argomento non fa davvero differenza:può accettarli o meno, indipendentemente dal modo in cui inserisci l'opzione.
Quando li si scrive per un utilizzo occasionale, non ha molta importanza, ma quando si scrivono comandi, ad esempio in file .alias, è consuetudine utilizzare il formato completo. Semplicemente per la facilità di lettura per la prossima persona.