Angenommen, ich habe ein Skript, das mit dieser Zeile aufgerufen wird:
./myscript -vfd ./foo/bar/someFile -o /fizz/someOtherFile
oder dieses:
./myscript -v -f -d -o /fizz/someOtherFile ./foo/bar/someFile
Wie kann man dies so interpretieren, dass in jedem Fall (oder einer Kombination von beiden) $v
, $f
y $d
werden alle auf true
y $outFile
wird gleich sein mit /fizz/someOtherFile
?
1 Stimmen
Für zsh-Benutzer gibt es ein großartiges builtin namens zparseopts, das das kann:
zparseopts -D -E -M -- d=debug -debug=d
Und haben beide-d
y--debug
im$debug
Arrayecho $+debug[1]
gibt 0 oder 1 zurück, wenn einer dieser Werte verwendet wird. Ref: zsh.org/mla/users/2011/msg00350.html2 Stimmen
Ein wirklich gutes Tutorial: linuxcommand.org/lc3_wss0120.php . Besonders gut gefällt mir das Beispiel "Befehlszeilenoptionen".
0 Stimmen
Ich habe ein Skript erstellt, das dies für Sie erledigt, es heißt - github.com/unfor19/bargs
2 Stimmen
Siehe auch Einem Bash-Skript die Möglichkeit geben, Flags zu akzeptieren, wie ein Befehl? für einen ausgeklügelten Ad-hoc-Parser für lange und kurze Optionen. Es wird nicht versucht, Optionsargumente zu behandeln, die an kurze Optionen angehängt sind, noch lange Optionen mit
=
die den Optionsnamen vom Optionswert trennt (in beiden Fällen wird einfach angenommen, dass der Optionswert im nächsten Argument steht). Es behandelt auch nicht die Clusterung von Kurzoptionen - die Frage brauchte das nicht.0 Stimmen
Diese tolle Anleitung von Baeldung zeigt 4 Möglichkeiten zur Verarbeitung von Kommandozeilenargumenten in der Bash, darunter: 1) Positionsbezogene Parameter
$1
,$2
, usw., 2) Flaggen mitgetopts
y${OPTARG}
3) Schleifenbildung über alle Parameter ($@
), und 4) Schleifenbildung über alle Parameter mit$#
,$1
und dieshift
Betreiber.0 Stimmen
Prüfen Sie die Lösung mit Bash Space-Separated: bigdata-etl.com/bash-parse-input-arguments-funtions-parameters