Ich versuche getopt
zu verwenden, um lange Argumente zu parsen (einige davon sind obligatorisch und andere nicht). Der Code:Die Verwendung von getopt zum Parsen langer Argumente überspringt den ersten Wert
#!/bin/bash
# firstName is compulsory, age is not and lastName is again compulsory.
OPTS=`getopt --long firstName:,age::,lastName: -n 'longArgumentsParsing' -- "[email protected]"`
if [ $? != 0 ] ; then echo "Failed parsing options." >&2 ; exit 1 ; fi
#echo "$OPTS"
eval set -- "$OPTS"
while true; do
echo "Argument seen: $1";
echo "And value seen: $2";
case "$1" in
--firstName) echo "First name: $2"; shift 2;
;;
--lastName)
echo "Last Name: $2";
shift 2;
;;
--age) if [ -z "$2" ];
then
echo "Age is not specified.";
else
echo "Age specifed: $2"; shift 2;
fi
;;
--) shift; break ;;
*) break ;;
esac
done
Jedes Mal, wenn ich es laufe mit ./longArgumentsParsing --firstName sriram --age 30
das Programm mit der folgenden Ausgabe beendet:
Argument seen: sriram
And value seen: --lastName
Das Programm ist eindeutig nicht in der Lage die Eingabe-Taste und Argument Wert-Paare richtig zu analysieren. Warum? Wo gehe ich falsch?
UPDATE:
Per this answer habe ich versucht, diese selbst zu debuggen: in der Befehlszeile:
set -- --firstName sriram --lastName shankar
und dann:
OPTS=$(getopt -l firstName:,lastName: -- "[email protected]");
die Ausgabe zu erhalten:
echo $?; echo "$OPTS"
0 'sriram' --lastName 'shankar' --
Meine Fragen:
1. Wie kann ich das oben genannte richtig finden?
2. Ich habe das optionale Argument entfernt (was ich nicht tun möchte), und bekomme immer noch den Fehler.