Qual è la differenza tra i parametri del prompt dei comandi da un trattino a due righe?

Mi chiedevo perché alcuni programmi richiedono che i parametri del prompt dei comandi dispongano di due trattini davanti mentre alcuni (più) richiedono solo un trattino davanti?

Ad esempio, la maggior parte dei programmi sembra questo: relaxer -dtd toc.xml toc_gr.xml toc_jp.xml

Mentre alcuni programmi sono simili a questo: xmllint --valid toc.xml --noout

Qual è la ragione per cui alcuni richiedono due trattini invece di uno? Non ha senso affinchè tutti si adattino a uno standard (vale a dire un singolo trattino).

Basta fare ls --help e guardare le opzioni, dovrebbe essere ovvio per te.

Non ha nulla a che fare con i parametri. Molte opzioni hanno una forma corta e una forma lunga, e molti hanno uno e non l'altro.

E anche, per quanto riguarda i parametri, è semplicemente che nella forma lunga quando prendono un parametro sembra che sia sempre con un uguale. Ma ovviamente brevi possono assumere parametri tanto quanto non utilizzano uguali.

Ecco un estratto dall'uomo ls o ls –help. Notare come alcuni hanno una forma lunga senza una forma breve (–author, –block-size). Alcuni hanno una forma corta senza una forma lunga (-c, -f, -g) e alcuni hanno sia una forma lunga che una forma breve (-A / – quasi-tutto, -b / – fuga)

  -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' 

Non esiste uno standard diffuso. C'è una certa coerenza, ad esempio nei programmi GNU, ma è necessario controllare la documentazione di ciascun programma.

Citando Wikipedia , la mia enfasi:

Nei sisthemes simili a Unix, viene usato comunemente il segno ASCII per specificare le opzioni. Il carattere è di solito seguito da una o più lettere . Un argomento che è un singolo trattino-minus di per sé senza alcuna lettera normalmente specifica che un programma dovrebbe gestire i dati provenienti dall'ingresso standard o submit i dati all'output standard. In alcuni programmi vengono utilizzati due caratteri a simmetria (-) (-) per specificare "opzioni lunghe" in cui vengono utilizzati nomi di opzioni più descrittivi . Questa è una caratteristica comune del software GNU.

Di solito i trattini indicano un argomento predefinito. Penso sia abituato a distinguerli da, ad esempio, nomi di file o altre etichette che potresti utilizzare come argomenti. Questo non è sempre il caso, però (vedi sotto).


Troverai spesso lo stesso argomento disponibile sia come opzione breve che lunga, come ad esempio in ls .

Alcuni programmi utilizzano un singolo trattino per le opzioni di un carattere e due trattini per le opzioni di carattere multi-carattere, ma non tutti ( find problema di GNU). Alcuni programmi dispongono di trattini opzionali o li trascinano totalmente ( tar o BSD ps vengono in mente).

A volte le opzioni lunghe ( --foo ) richiedono argomenti, mentre le opzioni brevi ( -f ) non (o alless implicano un argomento predefinito specifico).

Le opzioni brevi (ad esempio cut -d ' ' ) possono avere argomenti, mentre le opzioni lunghe (ad es. ls --all ) non ne hanno necessariamente.

Per impostare un comportmento particolare di un programma, a volte è necessario utilizzare un'opzione breve, per gli altri è necessario utilizzare un'opzione lunga e per alcuni si ha la possibilità di scegliere.

Su una nota correlata, alcuni programmi non possono gestire spazi vuoti tra un'opzione e il suo argomento , mentre altri non possono.

Come ho scritto all'inizio, non c'è semplicemente un comportmento o uno standard comuni. Spesso si può tracciare un comportmento simile alla stessa libreria utilizzata per analizzare l'argomento, ma probabilmente non si desidera leggere le fonti per scoprirlo.

Non puoi davvero dedurre la syntax di argomento di un programma da un altro.


Se si considera anche Windows, si peggiora: mentre la linea di command di Windows chiama tradizionalmente /f (alless la maggior parte del tempo, singoli caratteri) per le opzioni, con : come separatore tra le opzioni e il loro valore (vedi ad esempio qui ) ; le utility di cross-platform sono molto diffuse (come quelle citate) e portre la syntax più comune di argomenti con tutte le incongruenze sopra menzionate.

Questa è una convenzione proveniente da * nix. Il trattino doppio precede le opzioni quando sono scritte in pieno , mentre il trattino singolo precede le opzioni quando sono scritte in forma breve . Ad esempio ls --all --l , può essere abbreviato a ls -al . Come si vede, non tutte le opzioni hanno la loro equivalenza singola lettera, anche se più utilizzati di solito fanno.

Se l'opzione prende un argomento, non fa veramente la differenza: può prendere o non prendere, indipendentemente dal modo in cui immetti l'opzione.

Quando si scrive per un'utilizzazione di un tempo, non import, ma quando si scrivono comandi, ad esempio nei file .alias, è consuetudine utilizzare il formato completo. Pure per la facilità di lettura per la prossima persona.

queste sono le syntax convenzionali UNIX,

un argomento di programma prende un trattino ("-") seguito da una singola lettera quando è un'opzione semplice (ad esempio: -v ) e due trattini ("-") quando l'opzione prende argomenti (ad esempio: –file toc.xml o –file = toc.xml )

nessun impatto sulla funzionalità del programma.

il singolo trattino viene implementato dal getopt ed è la function standard posix, il doppio trattino in getopt_long ed è uno standard gnu.

Tradizionalmente, un unico dash fornisce un'opzione di carattere unico come questo:

-A o -V ecc, ma non deve essere limitata a quella. ad esempio -Wall per gcc triggers tutti gli avvisi del compilatore per il command di compilazione gcc.

gli argomenti a doppio trattino tendono ad essere più verbose e spesso assumono un parametro fornito come –max-count = NUM. Tuttavia, la versione non ha uguali.

In linea generale, non ci sono regole o standard definiti intorno a come devono essere specificati gli argomenti del programma, solo un gruppo di tradizioni. Tuttavia, se vengono utilizzate le funzioni di parsing delle linee di command getopt e getopt_long, i parametri devono generalmente seguire lo standard in quanto le funzioni della libreria impongono un certo modo di farlo.