Das mag wie eine dumme Frage scheinen, aber ich habe nach einer Lösung gesucht und habe keine gefunden. Ich habe ein Skript, das eine Reihe von Argumenten akzeptiert, und ich möchte einfach wissen, wie man ein Argument hat und auf das nächste unmittelbare Argument zugreift. Ich habe Sachen wie $i+1
ohne Erfolg versucht. Dieses nächste Argument wird letztendlich ein Zielverzeichnis enthalten, so dass ich auf den Inhalt zugreifen kann. Beachten Sie auch, dass ich die Argumentposition durch eine in einer Schleife durchlaufene Zählervariable erhalte, weshalb ich nicht einfach $2
oder so etwas sagen kann. Ich entschuldige mich für eine solche banale Frage.BASH Zugriff auf das nächste 'Feld' in der Befehlszeile ohne Schleife
1
A
Antwort
4
$ bash -c 'foo=1 ; echo ${@:$((foo+2)):1}' a b c d e f g
d
2
Wenn ich eine Variable für eine ganze Zahl enthält, und Sie möchten die (i + 1) -te Argument, können Sie tun:
eval arg=\$$((i + 1))
Nun enthält arg das Argument Sie
0
In Ihrem Fall ist es möglicherweise nicht anwendbar, aber wenn Sie sequentiell auf die Argumente zugreifen, können Sie den integrierten Befehl shift
verwenden, um die Argumente durchzuschalten.
tun shift
ohne Argument wird $1
zu $2
, $2
-$3
und so weiter gesetzt, den alten Wert von $1
verwerfen. Wenn Sie shift
ein numerisches Argument geben, werden sich viele Schritte verschieben.
Dies hat den Trick! Kannst du bitte erklären, was nach dem Echo passiert? Warum brauche ich so viele '$' und das '@'? Wofür werden die Doppelpunkte verwendet? Und der einsame 1? Ich danke dir sehr! – RedMageKnight
[Parametererweiterung] (http://wiki.bash-hackers.org/syntax/pe), [arithmetische Erweiterung] (http://wiki.bash-hackers.org/syntax/expansion/arith). –