Ich bin kein Linux-Typ, sondern stecke in einem Skript, das ich für mein Projekt lesen muss. Kann mir jemand helfen, was dieser Befehl tut?
shift $(($optind - 1))
bash
shell
shell-script
Gaurav Pant
quelle
quelle
Antworten:
shift $((OPTIND-1))
(AnmerkungOPTIND
ist Großbuchstaben) wird normalerweise unmittelbar nach einergetopts
while
Schleife gefunden.$OPTIND
ist die Anzahl der von gefundenen Optionengetopts
.Genau genommen
OPTIND
gibt pauljohn32 in den Kommentaren die Position des nächsten Befehlszeilenarguments an.Aus dem GNU Bash Referenzhandbuch :
shift
nentfernt n Zeichenfolgen aus der Liste der Positionsparameter. So
shift $((OPTIND-1))
entfernt alle Optionen , die von analysiert wurdengetopts
aus der Parameterliste, und so nach diesem Punkt,$1
auf den ersten Nicht-Option Argument wird sich auf das Skript übergeben.Aktualisieren
Wie mikeserv in dem Kommentar erwähnt,
shift $((OPTIND-1))
kann es unsicher sein. Um unerwünschte Worttrennungen usw. zu vermeiden, sollten alle Parametererweiterungen in doppelte Anführungszeichen gesetzt werden. Die sichere Form für den Befehl ist alsoshift "$((OPTIND-1))"
quelle
find
) so aussehen, als würden sie Optionen nach Nicht-Optionen zulassen, aber sie haben keine Operanden, die mit einem Bindestrich beginnen.IFS
, aber es ist besser, auf Nummer sicher zu gehen, als es zu tun. ;)IFS=0123456789
,shift $((OPTIND-1))
(ohne Anführungszeichen) verwandelt sich inshift ""
das wird unbemerkt ignoriert (inksh
) oder erzeugt einen Fehler (inbash
unddash
).$((...))
berechnet nur Sachen. In Ihrem Fall nimmt es den Wert von$optint
und subtrahiert 1.shift
Entfernt Positionsparameter. In Ihrem Fall werdenoptint-1
Parameter entfernt .Für weitere Informationen einen Blick auf
help getopts
,help shift
, Blick aufman bash
für „Arithmetic Expansion“, und vor allem Google fürgetopts
.quelle