Jaka jest różnica między flagami pojedynczego i podwójnego myślnika w poleceniach powłoki?
70
Jestem nowy w pracy w powłoce, a użycie tych poleceń wydaje się arbitralne. Czy istnieje powód, dla którego jedna flaga ma jedną kreskę, a inna może mieć podwójną kreskę?
Po jednym łączniku mogą występować flagi jednoznakowe. Podwójny łącznik poprzedza pojedynczą opcję wieloznakową.
Rozważ ten przykład:
tar -czf
W tym przykładzie -czfokreśla trzy flagi pojedynczych znaków: c, z, i f.
Teraz rozważ inny przykład:
tar --exclude
W takim przypadku --excludeokreśla pojedynczą opcję wieloznakową o nazwie exclude. Podwójny łącznik disambiguates argument wiersza polecenia, zapewniając, że tarinterpretuje go jako excludezamiast kombinacji e, x, c, l, u, d, i e.
@kylex, nie, ponieważ nie ma długiej opcji o nazwie tylko „c”, a - oznacza długą opcję, a nie następująca po niej opcja jednego znaku.
psusi
13
Czasami nawet długie polecenia mogą być przerywane. Na przykład „cdrecord” używa wszystkich poleceń z pojedynczą kreską (-eject -dao ...). Wszystko zależy od programu, ale większość (!) Z nich używa - do poleceń pojedynczych i - do poleceń
składających się
8
@mulaz, tak, cdrecord robi sporo niemądrych rzeczy.
@killjoy, ponieważ czy to przez ignorancję, czy wybór, autorzy tych programów nie przestrzegali oczywiście konwencji. Tak jak cdrecordwspomniano lata temu w powyższych komentarzach.
psusi
17
Wszystko zależy od programu. Zwykle „-” jest używane w przypadku opcji „krótkich” (jedna litera, -h), a „-” jest używane w przypadku opcji „długich” (er) (--help).
Krótkie opcje zwykle można łączyć (więc „-h -a” jest takie samo jak „-ha”)
W systemach uniksopodobnych do określania opcji powszechnie stosuje się łącznik minus ASCII. Po znaku zwykle występuje jedna lub więcej liter. Argument, który jest pojedynczym łącznikiem minus sam w sobie bez liter, zwykle określa, że program powinien obsługiwać dane pochodzące ze standardowego wejścia lub wysyłać dane na standardowe wyjście. W niektórych programach używane są dwa znaki łącznika minus (-) w celu określenia „długich opcji”, w których używane są bardziej opisowe nazwy opcji. Jest to wspólna cecha oprogramowania GNU.
To naprawdę konwencja. Może jednak pomóc parserom w bardziej efektywnym poznaniu opcji przekazanych do programu. Poza tym istnieją porządne narzędzia, które mogą pomóc w analizie tych poleceń, takie jak getopt(3)niestandardowe narzędzia getopt_long(3)do analizy argumentów programu.
To miłe, ponieważ możemy połączyć wiele krótkich opcji, jak mówią inne odpowiedzi tar -xzf myfile.tar.gz.
Gdyby istniał argument „Lisa” ls, prawdopodobnie miałby inne znaczenie ls -lisaniż typ ls --lisa. Były to l, i, soraz aparametry, a nie słowa.
W rzeczywistości możesz pisać ls -l -i -s -a, co oznacza dokładnie to samo co ls -lisa, ale to zależy od programu.
Istnieją również programy, które nie przestrzegają tej konwencji. Szczególnie dla mojego wzroku ddi gcc.
krótkie opcje z pojedynczym myślnikiem vs. długie opcje z podwójnym myślnikiem
krótkie opcje można łączyć w jeden argument;
for example: ls -lrt #instead of ls -l -r -t
Jeśli pozwolimy na długie opcje z jednym myślnikiem, spowoduje to niejednoznaczność. Aby rozwiązać ten problem, używamy podwójnego myślnika dla długich opcji.
Odpowiedzi:
Po jednym łączniku mogą występować flagi jednoznakowe. Podwójny łącznik poprzedza pojedynczą opcję wieloznakową.
Rozważ ten przykład:
W tym przykładzie
-czf
określa trzy flagi pojedynczych znaków:c
,z
, if
.Teraz rozważ inny przykład:
W takim przypadku
--exclude
określa pojedynczą opcję wieloznakową o nazwieexclude
. Podwójny łącznik disambiguates argument wiersza polecenia, zapewniając, żetar
interpretuje go jakoexclude
zamiast kombinacjie
,x
,c
,l
,u
,d
, ie
.źródło
cdrecord
wspomniano lata temu w powyższych komentarzach.Wszystko zależy od programu. Zwykle „-” jest używane w przypadku opcji „krótkich” (jedna litera, -h), a „-” jest używane w przypadku opcji „długich” (er) (--help).
Krótkie opcje zwykle można łączyć (więc „-h -a” jest takie samo jak „-ha”)
źródło
źródło
To naprawdę konwencja. Może jednak pomóc parserom w bardziej efektywnym poznaniu opcji przekazanych do programu. Poza tym istnieją porządne narzędzia, które mogą pomóc w analizie tych poleceń, takie jak
getopt(3)
niestandardowe narzędziagetopt_long(3)
do analizy argumentów programu.To miłe, ponieważ możemy połączyć wiele krótkich opcji, jak mówią inne odpowiedzi
tar -xzf myfile.tar.gz
.Gdyby istniał argument „Lisa”
ls
, prawdopodobnie miałby inne znaczeniels -lisa
niż typls --lisa
. Były tol
,i
,s
oraza
parametry, a nie słowa.W rzeczywistości możesz pisać
ls -l -i -s -a
, co oznacza dokładnie to samo cols -lisa
, ale to zależy od programu.Istnieją również programy, które nie przestrzegają tej konwencji. Szczególnie dla mojego wzroku
dd
igcc
.źródło
krótkie opcje można łączyć w jeden argument;
Jeśli pozwolimy na długie opcje z jednym myślnikiem, spowoduje to niejednoznaczność. Aby rozwiązać ten problem, używamy podwójnego myślnika dla długich opcji.
źródło