Zamieszanie na temat zmiany znaczenia argumentów i opcji, czy istnieje oficjalna standardowa definicja?

11

Natknąłem się na mylącą odmianę w zrozumieniu, jakie są opcje i argumenty w odniesieniu do składni poleceń.

Na przykład napotkałem definicje takie jak:

  • command -a -b -c d e f

    niektóre różnią się -a -b -c, nazywają je opcjami lub przełącznikami i d e fwywołują je jako argumenty.

  • command -a -b -c d e f

    niektóre, na przykład bashinstrukcja, wywołują wszystkie -a -b -c d e fargumenty i wyjaśniają, że wszystkie są dostępne odpowiednio ze skryptu $1 $2 $3 $4 $5 $6.

  • command -a b=c

    niektórzy nazywają -aopcję, bargument i cwartość, ale inni mieszają je jak w pierwszych dwóch punktach, w jednej odmianie wywołującej wszystkie -a b cargumenty.

Te trzy wersje są tylko przykładami wielu różnych odmian wywołujących, nawet nie wiem, jak je wszystkie wymienić, ale zauważyłem, że na pewno nie ma ustalonej konwencji nazewnictwa.

A przynajmniej nie znam znanej znanej mi konwencji, ponieważ natrafiłem na różne losowe źródła, ale nawet wśród oficjalnych stron lub podręczników powiązanych z Linuksem i GNU mogłem sprostać tej niespójności.

Czy istnieje niekwestionowany oficjalny schemat nazewnictwa, do którego mogę się odwoływać?

rekin
źródło
Druga forma jest w 100% poprawna z własnego punktu widzenia. Kontekst jest bardzo ważny.
Oskar Skog

Odpowiedzi:

18

Zaadaptowano z sekcji „Składnia argumentów narzędzia” standardu POSIX :

utility_name [-a] [-b] [-c option_argument]
             [-d|-e] [-f[option_argument]] [operand...]

Narzędzie w tym przykładzie ma nazwę utility_name. Po nim następują opcje , argumenty opcji i operandy .

Argumenty składające się ze -znaków i pojedynczych liter lub cyfr, takie jak a, są znane jako opcje (lub, historycznie, flagi ). Po niektórych opcjach następuje argument-argument , jak pokazano za pomocą [-c option_argument]. Argumenty występujące po ostatnich opcjach i argumenty opcji są nazywane operandami .

Standard definiuje również „argument” jako

W języku poleceń powłoki parametr przekazany do narzędzia jako odpowiednik pojedynczego ciągu w argvtablicy utworzonej przez jedną z execfunkcji. Argument jest jedną z opcji, argumentów opcji lub argumentów następujących po nazwie polecenia.


Wszystkie znaki występujące po utility_namewierszu poleceń są argumentami narzędzia i wszystkie pojawiają się w parametrach pozycyjnych, jeśli jest to skrypt powłoki. Terminy opcja, opcja-argument i operand są bardziej szczegółowymi nazwami tych argumentów w wierszu poleceń.

„Flaga” i „zmiana” są powszechnymi synonimami „opcji”.

W przypadku

utility -a b=c
  • -ai b=csą argumentami,
  • -ajest opcją, jeśli narzędzie rozpoznaje ją jako taką ( lnnarzędzie nie ma -xopcji, więc -xnie jest to opcja ln, mówiąc ściśle, i ln -xwywołałaby komunikat diagnostyczny),
  • b=cJest to opcja-argumentem jeśli-a opcja wymaga argumentu, w przeciwnym razie jest to argumentu,
  • bi same w sobie niec są opcjami, argumentami opcji i nie są operandami.

Jak zauważasz z mojego tekstu powyżej, praca z streszczenia narzędzia (podanego w podręczniku narzędzia) byłaby łatwiejsza niż próba dekodowania ogólnego polecenia wpisanego w wierszu poleceń. Podręcznik wyraźnie określi, które opcje przyjmują argumenty opcji, a które argumenty są operandami itp.

Nazywanie c„wartości” jest absolutnie w porządku. To nie jest coś, co jest ustandaryzowane, ale bardzo niewielu nie zrozumie cię, jeśli powiesz „ cto wartość podana dlab ”. Będzie to jasne z kontekstu danego narzędzia.

Na przykład

$ awk -v var="d" '...' data.in

Każdy, kto wie o awkpowiedziałbym, że -v var="d"środki „ zmienna jest przypisana wartość w wierszu poleceń ”.awkvard

Kusalananda
źródło