Ich möchte meine Version des Optionsparsing anbieten, die Folgendes ermöglicht:
-s p1
--stage p1
-w somefolder
--workfolder somefolder
-sw p1 somefolder
-e=hello
Auch dies ist möglich (könnte unerwünscht sein):
-s--workfolder p1 somefolder
-se=hello p1
-swe=hello p1 somefolder
Sie müssen vor der Verwendung entscheiden, ob = für eine Option verwendet werden soll oder nicht. Dies dient dazu, den Code sauber(er) zu halten.
while [[ $# > 0 ]]
do
key="$1"
while [[ ${key+x} ]]
do
case $key in
-s*|--stage)
STAGE="$2"
shift # option has parameter
;;
-w*|--workfolder)
workfolder="$2"
shift # option has parameter
;;
-e=*)
EXAMPLE="${key#*=}"
break # option has been fully handled
;;
*)
# unknown option
echo Unknown option: $key #1>&2
exit 10 # either this: my preferred way to handle unknown options
break # or this: do this to signal the option has been handled (if exit isn't used)
;;
esac
# prepare for next option in this key, if any
[[ "$key" = -? || "$key" == --* ]] && unset key || key="${key/#-?/-}"
done
shift # option(s) fully processed, proceed to next input argument
done
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