Ich erinnere mich, dass ich irgendwo ein bash
Skript gesehen habe, das die Liste der Positionsparameter, Analyseflags und Optionen mit Argumenten verwendet case
und shift
durchgeht, wenn es auf sie trifft, und sie nach dem Parsen entfernt, um nur die bloßen Argumente zu belassen, die später vom Rest der verarbeitet werden Skript.
Wenn Sie beispielsweise die Befehlszeile von analysieren cp -R file1 -t /mybackup file2 -f
, werden zunächst die Parameter durchlaufen, erkannt, dass der Benutzer angefordert hat, in Verzeichnisse von abzusteigen -R
, das Ziel von anzugeben -t /mybackup
und das Kopieren von zu erzwingen -f
, und diese aus der Liste der Parameter entfernt das Programm, das file1 file2
als verbleibende Argumente verarbeitet werden soll.
Aber ich scheine nicht in der Lage zu sein, mich an das Skript zu erinnern, das ich wann immer gesehen habe. Ich möchte das nur können. Ich habe auf verschiedenen Websites gegoogelt und eine Liste der relevanten Seiten angehängt, die ich untersucht habe.
Eine Frage auf dieser Website, die speziell nach "auftragsunabhängigen Optionen" gestellt wurde, aber sowohl die Einzelantwort als auch die Antwort auf die Frage, auf die sie gestellt wurde, berücksichtigt keine Fälle wie die oben genannten, in denen die Optionen mit normalen Argumenten gemischt sind, von denen ich annehme, dass dies die war Grund für die Person, auftragsunabhängige Optionen ausdrücklich zu erwähnen .
Da bash
das eingebaute getopts
Argument beim ersten Argument ohne Option zu enden scheint, scheint es als Lösung nicht ausreichend zu sein. Aus diesem Grund wird auf der Wooledge BashFAQ-Seite (siehe unten) erläutert, wie die Argumente neu angeordnet werden. Ich möchte jedoch vermeiden, mehrere Arrays zu erstellen, falls die Argumentliste ziemlich lang ist.
Da shift
es nicht unterstützt wird, einzelne Argumente aus der Mitte der Parameterliste zu entfernen, bin ich mir nicht sicher, wie ich das, was ich frage, auf einfache Weise implementieren kann.
Ich würde gerne hören, ob jemand Lösungen zum Entfernen von Argumenten aus der Mitte der Parameterliste hat, ohne ein ganz neues Array zu erstellen.
Seiten, die ich bereits gesehen habe:
- http://mywiki.wooledge.org/ComplexOptionParsing#Rearranging_arguments
- http://mywiki.wooledge.org/BashFAQ/035
- Verwenden von getopts im Bash-Shell-Skript, um lange und kurze Befehlszeilenoptionen abzurufen
- http://wiki.bash-hackers.org/scripting/posparams
- http://wiki.bash-hackers.org/howto/getopts_tutorial
- Bash-Argument Fall für Argumente in $ @
- Was ist der kanonische Weg, um auftragsunabhängige Optionen in Bash-Skripten zu implementieren?
- Wie gehe ich mit Schaltern in einem Shell-Skript um?