Cosa significa "-" nei comandi del terminale?


23

Ho visto molti tutorial che usano i --comandi after. Qualcosa come questo:

command -- 

Cosa significa questo --?


Quali tutorial video?
TheWanderer,


In realtà, sono sorpreso che questa domanda non fosse già un inganno su AU. Le domande identiche su altre community StackExchange non contano come duplicati (vale a dire il link fornito da @edwinksl)? Cosa ne pensi? Forse dovrei chiedere questo su META ....
Cbhihe,

@Cbhihe Non sono a conoscenza di un meccanismo che ci consenta di indicare target duplicati di altri siti SE. Comunque, non succede troppo spesso, quindi probabilmente non ce n'è bisogno.
edwinksl,

3
@ anonymous2 perché nel mondo dovremmo farlo? La domanda è sull'argomento qui, quindi può rimanere. Spostarlo rimuove le informazioni da AU e non aggiunge nulla di nuovo a U&L, quindi non vedo perché sarebbe una buona cosa.
Terdon,

Risposte:


46

Il --viene utilizzato per indicare la fine delle opzioni della riga di comando. Ciò consente di utilizzare gli argomenti che iniziano con --. Ad esempio, se si crea un file chiamato --foo:

$ > '--foo'
$ ls
--foo

E poi prova a eliminarlo, rmpenserà che gli stai dando un argomento:

$ rm --foo 
rm: unrecognized option '--foo'
Try 'rm ./--foo' to remove the file '--foo'.
Try 'rm --help' for more information.

Un modo per aggirare questo è usare --:

$ rm -- --foo

Questa è una pratica comune e consigliata da POSIX , quindi è supportata da molti programmi.


13
Non è affatto implementato da Bash. Si tratta di una caratteristica del rmprogramma e di molti programmi di utilità POSIX-compliant. Vedere la linea guida 10 . Per verificare effettivamente che non sia Bash a fare il lavoro (e che non avrebbe senso), basta creare un piccolo script con just printf '> %s <\n' "$@"e avviarlo con --.
gniourf_gniourf

3
@gniourf_gniourf d'oh! Ho controllato scrivendo un piccolo script perl che stampa le sue opzioni e non ne vede nessuna se le passi a --, ma, ovviamente, questo è semplicemente perché il relativo modulo Perl ( getopts) lo supporta anche. Hai ragione, ho appena cercato man bash, ho visto la sezione che avevo citato ma non ho notato che si trovava nella sezione "Opzioni della riga di comando". Grazie per la correzione, risposta modificata.
Terdon,

1

La maggior parte dei comandi utilizzerà a - per indicare al comando che ulteriori parametri dovrebbero essere trattati in modo diverso. Un esempio è il nome di file rm - - indicato sopra. Un altro esempio, uno script come 'startx' interpreterà se stesso tutto prima - e passerà tutto ciò che lo segue al server X.

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.