GETOPT(1) Användarkommandon GETOPT(1)

getopt - tolka kommandoval (förbättrad)

getopt optstring parametrar

getopt [flaggor] [--] optstring parameters

getopt [flaggor] -o|--options optstring [flaggor] [--] parameters

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.

-a, --alternative

Tillåt att långa flaggor börjar med ett enda '-'.

-l, --longoptions longopts

The long (multi-character) options to be recognized. More than one option name may be specified at once, by separating the names with commas, whitespace (spaces, tabs, or newlines). This option may be given more than once, the longopts are cumulative. Each long option name in longopts may be followed by one colon to indicate it has a required argument, and by two colons to indicate it has an optional argument.

-n, --name progname

Det namn som kommer att användas av getopt(3)-rutinerna när de rapporterar fel. Observera att fel i getopt(1) fortfarande rapporteras som att de kommer från getopt.

-o, --options shortopts

De korta (ett tecken långa) flaggor som ska identifieras. Om denna flagga inte hittas, används den första parametern i getopt som inte börjar med '-' (och som inte är ett flaggargument) som sträng för korta flaggor. Varje kort flaggtecken i shortopts kan följas av ett kolon för att ange att det har ett obligatoriskt argument, och av två kolon för att ange att det har ett valfritt argument. Det första tecknet i shortopts kan vara '+' eller '-' för att påverka hur flaggorna analyseras och utdata genereras (se avsnittet SCANNINGSMODER för mer information).

-q, --quiet

Inaktivera felrapportering från getopt(3).

-Q, --quiet-output

Genererar inte normal utdata. Fel rapporteras fortfarande av getopt(3), såvida du inte också använder -q.

-s, --shell skal

Ställ in citatkonventionerna till de som används i skal. Om flaggan -s inte anges används BASH-konventionerna. Giltiga argument är för närvarande 'sh', 'bash', 'csh' och 'tcsh'.

-T, --test

Testa om din getopt(1) är denna förbättrade version eller en gammal version. Detta genererar ingen utdata och sätter felstatusen till 4. Andra implementationer av getopt(1), och den här versionen om miljövariabeln GETOPT_COMPATIBLE är inställd, returnerar '--' och felstatus 0.

-u, --unquoted

Citera inte utdata. Observera att blanksteg och specialtecken (beroende på skalet) kan orsaka problem i det här läget (precis som i andra getopt(1)-implementeringar).

-U, --unknown

Leave unknown options as they are and suppress error messages from getopt(3). Since there is no way to know whether an unknown option requires an argument, a non-option argument that follows the unknown option after a whitespace, is considered an option argument, therefore the argument will be left untouched and printed next to the respective unknown option. To prevent unexpected behavior, short options should be specified individually.

-h, --help

Visa hjälptext och avsluta.

-V, --version

Visa version och avsluta.

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.

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 '+').

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.

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.

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.

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.

Exempelskript för (ba)sh och (t)csh tillhandahålls med getopt(1)-distributionen och installeras i katalogen /usr/share/doc/util-linux.

POSIXLY_CORRECT

Denna miljövariabel undersöks av rutinerna getopt(3). Om den är inställd stoppas parsningen så snart en parameter hittas som inte är en flagga eller ett flaggargument. Alla återstående parametrar tolkas också som icke-flaggparametrar, oavsett om de börjar med '-' eller inte.

GETOPT_COMPATIBLE

Tvingar getopt att använda det första anropsformatet enligt vad som anges i SYNOPSIS.

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).

Frodo Looijaard <frodo@frodo.looijaard.name>

bash(1), tcsh(1), getopt(3)

För felrapporter, använd felhanteraren https://github.com/util-linux/util-linux/issues.

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