
Ich habe den Code angepasst, um nur eine einzige mögliche Option zu verarbeiten. Führen Sie entweder die Funktion aus oder geben Sie über die Hilfeoption eine kurze Beschreibung ein.
activate-jet ()
{
local iarg=0 narg="$#"
while (( narg > 0 )); do
opt="$1" ; iarg=$(( iarg + 1 ))
case $opt in
("-h"|"--help") echo "TODO" ; return ;;
(*) break ;;
esac
done
}
Ich würde es, wenn möglich, gerne weiter vereinfachen, ohne dass es beim Aufruf zu merkwürdigem Verhalten des Benutzers kommt.
Antwort1
Dies ist eine Möglichkeit, da Sie sagen, dassdu brauchst nureinsStreit, daher besteht keine Notwendigkeit für Schleifen oder „Gehäuse“:
$ activate_jet() {
[[ "$#" -gt 1 ]] && echo "Invalid number of arguments" && return
if [[ ! -z "$1" ]]; then
if [[ "$1" = "-h" || "$1" = "--help" ]]; then
echo "TODO" && return
else
echo "Bad argument" && return
fi
fi
echo "jet activated"
}
$ activate_jet foo bar
Invalid number of arguments
$ activate_jet foo
Bad argument
$ activate_jet -h
TODO
$ activate_jet --help
TODO
$ activate_jet
jet activated
Beachten Sie, dass ich den Namen der Funktion geändert habe, indem ich den Bindestrich durch einen Unterstrich ersetzt habe: activate_jet
anstelle von activate-jet
, weil der Bindestrichist möglicherweise nicht mit einigen Shells kompatibel:
Schlussfolgerungen
- Bindestriche sind kein Standard. Vermeiden Sie sie, wenn Sie Shell-übergreifende Kompatibilität wünschen.
- Verwenden Sie Unterstriche statt Bindestriche: Unterstriche werden überall akzeptiert.