Ich habe die Funktion f
in Bash anhand des folgenden Beispiels definiert (unter "Eine Option mit einem Argument"):
f () {
while getopts ":a:" opt; do
case $opt in
a)
echo "-a was triggered, Parameter: $OPTARG" >&2
;;
\?)
echo "Invalid option: -$OPTARG" >&2
return 1
;;
:)
echo "Option -$OPTARG requires an argument." >&2
return 1
;;
esac
done
}
Während sie ein Skript verwenden, definiere ich die Funktion direkt in der Shell.
Wenn ich Bash zum ersten Mal starte und die Funktion definiere, funktioniert alles: f -a 123
Drucken -a was triggered, Parameter: 123
. Aber wenn ich ein zweites Mal genau dieselbe Zeile laufen lasse, wird nichts gedruckt .
Was verursacht dieses Verhalten? Es passiert in Bash 3.2 und 4.3, aber es funktioniert gut in Zsh 5.1. Dies ist überraschend, da das Beispiel für Bash und nicht für Zsh sein sollte.