Wie kann ich verbleibende Argumente erhalten, nachdem ich mit getopts analysierte Elemente herausgezogen habe?


14

Ich möchte einige Argumente mit getopts in ein Bash-Skript einbauen, möchte aber auf die verbleibenden Argumente zugreifen können, die nicht in der Optionsliste enthalten sind. Wenn ich zum Beispiel einen Anruf habe:

% script -a -b param -c param -d other arguments here

Ich hätte:

while getopts "ab:c:d" opt ; do
.
done

Was ist der einfachste Weg, um "andere Argumente hier" zu erhalten, die von getopts nicht verarbeitet werden sollten?

Antworten:


17

Sie müssen verschieben, wenn Sie ein Argument analysieren oder setzen

Verschieben Sie $ ((OPTIND -1)), nachdem Sie das Parsen beendet haben, und verfahren Sie dann wie gewohnt, z

while getopts "ab:c:d" opt ; do
.
done
shift $(expr $OPTIND - 1 )

while test $# -gt 0; do
  echo $1
  shift
done

1
Es lohnt sich zu erklären, dass $ OPTIND der Index der nächsten zu berücksichtigenden Option ist, nachdem jedes Getopts ausgeführt wurde. Daher enthält $ * 3 Parameter, nach dem ersten gültigen Aufruf sind es 2 und nach dem zweiten sind es 3. Sollte ein Aufruf ungültig sein, wird er mit dem früheren Wert abgebrochen. Also, wenn Parameter 1 nicht gültig ist, wird OPTIND 1 sein (daher wird das obige Beispiel shift $(expr 1 - 1)sicher sein.
sibaz 30.10.17

0

Am Ende des Parsens enthält die Variable $ @ nach dem Verschieben das Zeilenende:

while getopts "ab:c:d" opt ; do
.
done
shift $((OPTIND-1))
OTHERARGS=$@
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.