Ich benutze getopts, um Argumente in Bash-Skripten als zu analysieren
while getopts ":hd:" opt; do
case $opt in
d ) echo "directory = $OPTARG"; mydir="$OPTARG"; shift $((OPTIND-1)); OPTIND=1 ;;
h ) helptext
graceful_exit ;;
* ) usage
clean_up
exit 1
esac
done
exeparams="$*"
exeparams
enthält alle nicht analysierten Optionen / Argumente. Da ich exeparams verwenden möchte, um Optionen für einen Befehl zu speichern, der innerhalb des Skripts ausgeführt werden soll (was sich mit den eigenen Optionen des Skripts überschneiden kann), möchte ich verwenden, um die an das Skript übergebenen Optionen zu beenden. Wenn ich z
myscript -d myscriptparam -- -d internalparam
exeparams
wird halten
-- -d internalparam
Ich möchte jetzt die führende entfernen --
, um diese Argumente an den internen Befehl zu übergeben. Gibt es eine elegante Möglichkeit, dies zu tun, oder kann ich eine Zeichenfolge erhalten, die nur den Rest ohne --
Getopts enthält?
shift; OPTIND=1
in diegetopts
Schleife ist wahrscheinlich nicht der beste Weg, dies zu tun. Dies funktioniert nur in Ihrem Fall, da Sie nur zwei Optionen haben und in allen anderen nur das Skript beenden. Andernfalls würden Sieshift; OPTIND=1
in jeder Option benötigen , was doppelten Code bedeutet (schlechte Praxis). Machen Sie einfach eineshift $((OPTIND - 1))
unmittelbar nach dem Ende der Schleife - dies ist der konventionellste und wahrscheinlich auch der effizienteste Weg.