GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Getopt, Getopts oder manuelles Parsing – was soll ich verwenden, wenn ich sowohl kurze als auch lange Optionen unterstützen möchte?

Derzeit schreibe ich ein Bash-Skript, das die folgenden Anforderungen hat:

  • es sollte auf einer Vielzahl von Unix/Linux-Plattformen laufen
  • es sollte sowohl kurze als auch (GNU) lange Optionen unterstützen

Ich weiß, dass getopts wäre der bevorzugte Weg in Bezug auf die Portabilität, aber AFAIK unterstützt keine langen Optionen.

getopt unterstützt lange Optionen, aber der BashGuide rät dringend davon ab:

Verwenden Sie niemals getopt(1). getopt kann keine leeren Argumentstrings oder
Argumente mit eingebetteten Leerzeichen verarbeiten. Bitte vergiss, dass es jemals
existiert hat.

Es besteht also weiterhin die Möglichkeit des manuellen Parsings. Dies ist fehleranfällig, produziert ziemlich viel Boilerplate-Code, und ich muss Fehler selbst behandeln (ich denke, getopt(s) Fehlerbehandlung selbst durchführen).

Was wäre also in diesem Fall die bevorzugte Wahl?

Akzeptierte Antwort:

Wenn es auf eine Reihe von Unices portierbar sein muss, müssen Sie sich an POSIX sh halten. Und AFAIU, da hast du einfach keine andere Wahl, als die Argumentation von Hand zu handhaben.


Linux
  1. Was ist ein Chown-Befehl unter Linux und wie wird er verwendet?

  2. Chroot „Gefängnis“ – Was ist das und wie benutzt man es?

  3. Welche Bedeutung hat caddr_t und wann wird es verwendet?

  4. Welches Dateisystem soll verwendet werden, wenn sowohl Windows als auch Linux verwendet werden?

  5. Was ist der Unterschied zwischen einem Bindestrich und zwei Bindestrichen für Eingabeaufforderungsparameter?

Was ist ein Chroot-Gefängnis und wie wird es verwendet?

So verwenden Sie SFTP-Befehle und -Optionen

Linux-Dateibefehl:Was macht er und wie wird er verwendet?

Linux-Tail-Befehl:Was es ist und wie man es verwendet

Was ist Terraform und wie wird es auf AWS EC2 installiert und verwendet?

Was ist eine virtuelle Maschine und warum sollte man sie verwenden?