| GETOPT(1) | Användarkommandon | GETOPT(1) |
NAMN
getopt - tolka kommandoval (förbättrad)
SYNOPSIS
getopt optstring parametrar
getopt [flaggor] [--] optstring parameters
getopt [flaggor] -o|--options optstring [flaggor] [--] parameters
BESKRIVNING
getopt används för att dela upp (parsa) flaggor i kommandorader så att de enkelt kan analyseras av skalprocedurer och för att kontrollera om flaggor är giltiga. För detta ändamål används GNU getopt(3)-rutinerna.
De parametrar som getopt anropas med kan delas in i två delar: flaggor som ändrar hur getopt ska utföra tolkningen (options och optstring i SYNOPSIS) och de parametrar som ska tolkas (parameters i SYNOPSIS). Den andra delen börjar vid den första parametern som inte är en flagga och som inte är ett flaggargument, eller efter den första förekomsten av '--'. Om ingen '-o' eller '--options'-flagga hittas i den första delen, används den första parametern i den andra delen som den korta flaggsträngen.
Om miljövariabeln GETOPT_COMPATIBLE är inställd, eller om den första parametern inte är en flagga (börjar inte med '-', det första formatet i SYNOPSIS), kommer getopt att generera utdata som är kompatibla med utdata från andra versioner av getopt(1). Den kommer fortfarande att blanda parametrar och känna igen valfria argument (se avsnittet KOMPATIBILITET för mer information).
Traditionella implementationer av getopt(1) klarar inte av att hantera blanksteg och andra (shell-specifika) specialtecken i argument och parametrar som inte är optioner. För att lösa detta problem kan denna implementation generera citerad utdata som återigen måste tolkas av skalet (vanligtvis med kommandot eval). Detta innebär att dessa tecken bevaras, men du måste anropa getopt på ett sätt som inte längre är kompatibelt med andra versioner (det andra eller tredje formatet i SYNOPSIS). För att avgöra om denna förbättrade version av getopt(1) är installerad, kan en speciell testflagga (-T) användas.
FLAGGOR
-a, --alternative
-l, --longoptions longopts
-n, --name progname
-o, --options shortopts
-q, --quiet
-Q, --quiet-output
-s, --shell skal
-T, --test
-u, --unquoted
-U, --unknown
-h, --help
-V, --version
PARSING
I detta avsnitt anges formatet för den andra delen av parametrarna i getopt (parametrarna i SYNOPSIS). I nästa avsnitt (OUTPUT) beskrivs den utdata som genereras. Dessa parametrar var typiskt de parametrar som en skalfunktion anropades med. Man måste vara noga med att varje parameter som skalfunktionen anropades med motsvarar exakt en parameter i parameterlistan för getopt (se EXEMPLES). All parsning görs av GNU:s getopt(3)-rutiner.
Parametrarna analyseras från vänster till höger. Varje parameter klassificeras som en kort flagga, en lång flagga, ett argument till en flagga eller en parameter som inte är en flagga.
En enkel kort flagga är ett '-' följt av ett kort flaggtecken, med undantag för tecknen ':', ';' och '?', eftersom dessa reserveras av getopt(3). Om flaggan har ett obligatoriskt argument kan det skrivas direkt efter flaggtecknet eller som nästa parameter (d.v.s. separerat med blanksteg på kommandoraden). Om flaggan har ett valfritt argument måste det skrivas direkt efter flaggtecknet om det finns.
Det är möjligt att ange flera korta flaggor efter ett "-", så länge som alla (utom möjligen det sista) inte har obligatoriska eller valfria argument.
En lång flagga inleds normalt med "--" följt av det långa flaggnamnet. Om flaggan har ett obligatoriskt argument kan det skrivas direkt efter det långa flaggnamnet, avgränsat med '=', eller som nästa argument (dvs. avgränsat med blanksteg på kommandoraden). Om flaggan har ett valfritt argument måste det skrivas direkt efter det långa flaggnamnet, separerat med '=', om det finns (om du lägger till '=' men inget efter det tolkas det som om inget argument fanns; detta är ett litet fel, se KÄNDA PROBLEM). Långa flaggor kan förkortas, så länge förkortningen inte är tvetydig.
Varje parameter som inte börjar med "-" och som inte är ett obligatoriskt argument för en tidigare flagga är en icke-flaggparameter. Varje parameter efter en '--'-parameter tolkas alltid som en icke-flaggparameter. Om miljövariabeln POSIXLY_CORRECT är inställd, eller om den korta flaggsträngen började med '+', tolkas alla återstående parametrar som icke-flagga så snart den första icke-flaggparametern hittas.
UTFLÖDE
Utdata genereras för varje element som beskrivs i föregående avsnitt. Utmatningen sker i samma ordning som elementen specificeras i indata, med undantag för parametrar som inte är flaggor. Utmatningen kan göras i kompatibelt (icke-citerat) läge, eller på ett sådant sätt att blanksteg och andra specialtecken i argument och icke-optionsparametrar bevaras (se CITERING). När utdata bearbetas i skalskriptet kommer det att se ut som om det består av distinkta element som kan bearbetas ett efter ett (genom att använda kommandot shift i de flesta skalspråk). Detta är inte perfekt i okommenterat läge, eftersom element kan delas upp på oväntade ställen om de innehåller blanksteg eller specialtecken.
Om det uppstår problem med att analysera parametrarna, t.ex. för att ett obligatoriskt argument inte hittas eller en flagga inte känns igen, rapporteras ett fel på stderr, ingen utdata för det felaktiga elementet och en felstatus som inte är noll returneras.
För en kort flagga genereras ett enda '-' och flaggtecknet som en parameter. Om flaggan har ett argument, kommer nästa parameter att vara argumentet. Om flaggan tar ett valfritt argument, men inget hittades, kommer nästa parameter att genereras men vara tom i citerande läge, men ingen andra parameter kommer att genereras i okvoterat (kompatibelt) läge. Observera att många andra getopt(1)-implementeringar inte stöder valfria argument.
Om flera korta flaggor anges efter ett enda "-", kommer varje flagga att visas som en separat parameter i utdata.
För en lång flagga genereras "--" och det fullständiga namnet på flaggan som en parameter. Detta görs oavsett om flaggan förkortades eller angavs med ett enda '-' i indata. Argumenten hanteras på samma sätt som för korta flaggor.
Normalt genereras ingen utdata för parametrar som inte är flaggor förrän alla flaggor och deras argument har genererats. Då genereras "--" som en enda parameter och därefter parametrarna för icke-flaggor i den ordning de hittades, var och en som en separat parameter. Endast om det första tecknet i den korta optionssträngen var ett '-' genereras utdata för icke-optionsparametrar på den plats där de finns i indata (detta stöds inte om det första formatet för SYNOPSIS används; i så fall ignoreras alla föregående förekomster av '-' och '+').
CITAT
I kompatibilitetsläget hanteras inte blanksteg eller "specialtecken" i argument eller parametrar som inte är flaggor korrekt. När utdata matas in i skalskriptet vet inte skriptet hur det ska dela upp utdata i separata parametrar. För att kringgå detta problem erbjuder denna implementation quoting. Tanken är att utdata genereras med citattecken runt varje parameter. När denna utdata återigen matas till skalet (vanligtvis med ett eval-kommando) delas den upp korrekt i separata parametrar.
Quoting aktiveras inte om miljövariabeln GETOPT_COMPATIBLE är inställd, om den första formen av SYNOPSIS används eller om flaggan "-u" hittas.
Olika skal använder olika citeringskonventioner. Du kan använda flaggan "-s" för att välja det skal du använder. Följande skal stöds för närvarande: 'sh', 'bash', 'csh' och 'tcsh'. Egentligen skiljer man bara på två "smaker": sh-liknande citeringskonventioner och csh-liknande citeringskonventioner. Om du använder ett annat skalskriptspråk är chansen stor att du ändå kan använda någon av dessa varianter.
SKANNINGSMODELLER
Det första tecknet i den korta optionssträngen kan vara ett '-' eller ett '+' för att ange ett speciellt skanningsläge. Om den första anropsformen i SYNOPSIS används ignoreras de; miljövariabeln POSIXLY_CORRECT undersöks dock fortfarande.
Om det första tecknet är '+', eller om miljövariabeln POSIXLY_CORRECT är inställd, stoppas parsningen så snart den första icke-flaggparametern (dvs. en parameter som inte börjar med '-') hittas som inte är ett flaggargument. De återstående parametrarna tolkas alla som icke-flaggparametrar.
Om det första tecknet är en "-", matas parametrar som inte är flaggor ut på den plats där de finns; i normal drift samlas de alla i slutet av utmatningen efter att en "--"-parameter har genererats. Observera att denna "--"-parameter fortfarande genereras, men den kommer alltid att vara den sista parametern i detta läge.
KOMPATIBILITET
Den här versionen av getopt(1) är skriven för att vara så kompatibel som möjligt med andra versioner. Vanligtvis kan du bara ersätta dem med den här versionen utan några ändringar, och med vissa fördelar.
Om det första tecknet i den första parametern i getopt inte är ett '-', går getopt in i kompatibilitetsläge. Den tolkar sin första parameter som en sträng med korta flaggor och alla andra argument analyseras. Det kommer fortfarande att blanda parametrar (dvs. alla parametrar som inte är flaggor kommer att matas ut i slutet), såvida inte miljövariabeln POSIXLY_CORRECT är inställd, i vilket fall getopt automatiskt lägger till ett '+' före korta flaggor.
Miljövariabeln GETOPT_COMPATIBLE tvingar getopt till kompatibilitetsläge. Om du ställer in både denna miljövariabel och POSIXLY_CORRECT får du 100% compatibilitet för "svåra" program. Vanligtvis behövs dock ingen av dem.
I kompatibilitetsläget ignoreras ledande '-' och '+'-tecken i den korta optionssträngen.
RETURN-KODER
getopt returnerar felkod 0 för lyckad parsning, 1 om getopt(3) returnerar fel, 2 om den inte förstår sina egna parametrar, 3 om ett internt fel inträffar, t.ex. out-of-memory, och 4 om den anropas med -T.
EXEMPEL
Exempelskript för (ba)sh och (t)csh tillhandahålls med getopt(1)-distributionen och installeras i katalogen /usr/share/doc/util-linux.
MILJÖ
POSIXLY_CORRECT
GETOPT_COMPATIBLE
KÄNDA PROBLEM
getopt(3) kan analysera långa flaggor med valfria argument som ges ett tomt valfritt argument (men kan inte göra detta för korta flaggor). Denna getopt(1) behandlar valfria argument som är tomma som om de inte fanns.
Syntaxen om du inte vill ha några short option-variabler alls är inte särskilt intuitiv (du måste uttryckligen ställa in dem till den tomma strängen).
FÖRFATTARE
Frodo Looijaard <frodo@frodo.looijaard.name>
SE ÄVEN
FELRAPPORTERING
För felrapporter, använd felhanteraren https://github.com/util-linux/util-linux/issues.
TILLGÄNGLIGHET
Kommandot getopt ingår i paketet util-linux som kan hämtas från Linux Kernel Archive https://www.kernel.org/pub/linux/utils/util-linux/.
| 2026-05-18 | util-linux 2.42.1 |