Odpowiedzi:
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 -v
będzie brana pod uwagę opcja odwrócenia pasującego znaczenia (pokazuj tylko linie, które nie pasują), ale przy pomocy --
grep dla łańcucha -v
takiego:
grep -- -v file
--
Działa w celu oddzielenia opcji od wyrażeń regularnych grep
, ale kanonicznym sposobem jest użycie -e
/ --regexp
.
--
, 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).
bash
wbudowane polecenia akceptują --
jako znacznik końca opcji. [
i echo
nie na przykład ( jeden z powodów echo
nie może być wykorzystany niezawodnie ).
W man bash
moż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
,false
itest
builtins nie akceptują opcje i nie traktuje--
specjalnie.exit
,logout
,break
,continue
,let
, Ishift
builtins 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
echo
nie--
oznacza to końca opcji.
man bash
(notatka do siebie następnym razem:).
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
set
wbudowanym Bash , gdzie jest to absolutnie konieczne.