Co oznacza „-” w poleceniach terminalu?

23

Widziałem wiele samouczków, które używają --poleceń po. Coś takiego:

command -- 

Co to --znaczy

Jibril
źródło
Jakie samouczki wideo?
TheWanderer
Tak naprawdę jestem zaskoczony, że to pytanie nie było już duplikatem dla AU. Czy identyczne pytania w innych społecznościach StackExchange nie liczą się jako duplikaty (patrz link podany przez @edwinksl)? Jakie jest na to zdanie? Może powinienem o to zapytać w META ....
Cbhihe,
@Cbhihe Nie znam mechanizmu, który pozwala nam wskazywać duplikaty celów innych witryn SE. W każdym razie nie zdarza się to zbyt często, więc prawdopodobnie nie ma takiej potrzeby.
edwinksl
3
@ anonymous2 dlaczego na świecie mielibyśmy to zrobić? Pytanie jest tutaj na temat, więc może zostać. Przeniesienie go usunęłoby informacje z AU i nie dodałoby nic nowego do U&L, więc nie rozumiem, dlaczego byłoby to dobre.
terdon

Odpowiedzi:

46

--Służy do wskazania końca opcji wiersza poleceń. Umożliwia to użycie argumentów zaczynających się od --. Na przykład, jeśli utworzysz plik o nazwie --foo:

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

A potem spróbuj go usunąć, rmpomyślisz, że podajesz mu argument:

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

Jednym ze sposobów obejścia tego jest użycie --:

$ rm -- --foo

Jest to powszechna praktyka zalecana przez POSIX , więc jest obsługiwana przez wiele programów.

terdon
źródło
13
W ogóle nie jest zaimplementowany przez Bash. Jest to funkcja rmprogramu i wielu narzędzi zgodnych z POSIX. Zobacz wytyczną 10 . Aby faktycznie sprawdzić, czy Bash nie wykonuje pracy (i to nie miałoby sensu), po prostu stwórz mały skrypt za pomocą just printf '> %s <\n' "$@"i uruchom go --.
gniourf_gniourf
3
@gniourf_gniourf d'oh! Sprawdziłem, pisząc mały skrypt Perla, który wypisuje jego opcje i nie widzi żadnego, jeśli go przekażesz --, ale oczywiście dzieje się tak, ponieważ odpowiedni moduł Perla ( getopts) również go obsługuje. Masz rację, po prostu szybko przeszukałem man bashsekcję, którą zacytowałem, ale nie zauważyłem, że znajdowała się w sekcji „Opcje wiersza poleceń”. Dzięki za korektę, odpowiedź zredagowana.
terdon
1

Większość poleceń użyje znaku -, aby powiedzieć poleceniu, że dalsze parametry powinny być traktowane inaczej. Jednym z przykładów jest rm - - nazwa pliku wymieniony powyżej. Kolejny przykład, skrypt taki jak „startx” zinterpretuje wszystko wcześniej - i przekaże wszystko po nim do serwera X.

delt
źródło