Co oznacza „-” (podwójny myślnik)? (znany również jako „bare double dash”)

469

Widziałem --używane w compgenpoleceniu.

Na przykład:

compgen -W "foo bar baz" -- b

Jakie jest znaczenie --tam?

dogbane
źródło

Odpowiedzi:

583

Dokładniej, podwójna kreska ( --) jest używana we wbudowanych komendach bash i wielu innych komendach, oznaczających koniec opcji komend, po których akceptowane są tylko parametry pozycyjne.

Przykład użycia: powiedzmy, że chcesz grepować plik dla łańcucha -v- zwykle -vbędzie brana pod uwagę opcja odwrócenia pasującego znaczenia (pokazuj tylko linie, które nie pasują), ale przy pomocy --grep dla łańcucha -vtakiego:

grep -- -v file
Guss
źródło
3
W szczególności we setwbudowanym Bash , gdzie jest to absolutnie konieczne.
l0b0
10
--Działa w celu oddzielenia opcji od wyrażeń regularnych grep, ale kanonicznym sposobem jest użycie -e/ --regexp.
l0b0 18.10.12
5
@ l0b0: wzorzec do przeszukania jest zwykle jednym z parametrów pozycyjnych, więc może pasować po --, chociaż masz rację zauważając, że mój powyższy przykład można również zapisać jako grep -e -v file(chociaż jest to bardzo mylące).
Guss
2
Nie wszystkie bashwbudowane polecenia akceptują --jako znacznik końca opcji. [i echonie na przykład ( jeden z powodów echonie może być wykorzystany niezawodnie ).
Stéphane Chazelas
44

Oznacza koniec listy parametrów (opcji).

polemon
źródło
39

W man bashmożemy przeczytać w sekcji poleceń poleceń wbudowanych powłoki :

O ile nie zaznaczono inaczej, każde wbudowane polecenie udokumentowane w tej sekcji jako akceptowanie opcji poprzedzone przez -akceptuje -- oznaczanie końca opcji .

Te :, true, falsei testbuiltins nie akceptują opcje i nie traktuje --specjalnie. exit, logout, break, continue, let, I shiftbuiltins zaakceptować i argumenty proces rozpoczynający się -bez potrzeby --. Inne wbudowane akceptujące argumenty, ale nieokreślone jako opcje akceptują, interpretują argumenty zaczynające się -od niepoprawnych opcji i wymagają --zapobiegania takiej interpretacji.

Zauważ, że echonie --oznacza to końca opcji.

kenorb
źródło
2
+1 za odniesienie man bash(notatka do siebie następnym razem:).
user3773048,
11

POSIX.1-2017

12.2 Wytyczne dotyczące składni narzędzi

Wytyczna 10:

Pierwszy --argument, który nie jest argumentem opcji, powinien zostać zaakceptowany jako separator wskazujący koniec opcji. Wszelkie poniższe argumenty należy traktować jak operandy, nawet jeśli zaczynają się od -znaku „ ”.

http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html#tag_12_02

nieznany z nazwiska
źródło