Das letzte Argument an ein Shell-Skript übergeben
$1
ist das erste argument.
$@
ist alle.
Wie finde ich die letzten argument übergeben Sie eine shell
Skript?
InformationsquelleAutor der Frage Thomas | 2009-12-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist ein bisschen ein hack:
Dieser ist auch ziemlich portable (wieder, sollten die arbeiten mit der bash, ksh und sh) und es verrutscht nicht, die Argumente, die könnten nett sein.
Es nutzt die Tatsache, dass
for
implizit Schleifen über die Argumente, wenn Sie nicht sagen, was zu Durchlaufen, und die Tatsache, dass die for-Schleife Variablen nicht scoped: Sie halten den letzten Wert, den Sie eingestellt waren.InformationsquelleAutor der Antwort Laurence Gonsalves
Dies ist Bash-nur:
InformationsquelleAutor der Antwort Dennis Williamson
Die einfachste Antwort für die bash 3.0 oder höher ist
Das ist es.
Ausgabe:
InformationsquelleAutor der Antwort Kevin Little
Den Raum ist notwendig, damit es nicht interpretiert als Standardwert.
InformationsquelleAutor der Antwort Steven Penny
Indizierung nutzen, kombiniert mit Länge:
InformationsquelleAutor der Antwort Mark Byers
Werden die folgenden arbeiten für Sie. Die @ für array von Argumenten. bedeutet : bei. $# ist die Länge des array von Argumenten. So das Ergebnis ist das Letzte element:
Beispiel:
InformationsquelleAutor der Antwort Tahsin Turkoz
Fand diese bei der Suche zu trennen, das Letzte argument von allen vorherigen(s).
Während einige Antworten bekommen, das Letzte argument, Sie sind nicht viel helfen, wenn Sie benötigen, alle anderen Argumente als gut. Das funktioniert viel besser:
InformationsquelleAutor der Antwort AgileZebra
Dies funktioniert in allen POSIX-kompatiblen shells:
Quelle: http://www.faqs.org/faqs/unix-faq/faq/part2/section-12.html
InformationsquelleAutor der Antwort poiuz
Wenn Sie mit Bash >= 3.0
InformationsquelleAutor der Antwort dusan
Hier ist meine Lösung:
böseeval
Code:
InformationsquelleAutor der Antwort Michał Šrajer
Dadurch verschiebt sich die Argumente durch die Anzahl der Argumente, minus 1, und gibt die erste (und einzige Verbleibende argument, das der Letzte sein wird.
Ich nur in der bash getestet, es sollte aber in sh und ksh auch.
InformationsquelleAutor der Antwort Laurence Gonsalves
Wenn Sie wollen, es zu tun in einem nicht-destruktiven Weg, ein Weg, um alle übergeben der Argumente an eine Funktion und Rückkehr der Letzte:
Wenn Sie nicht wirklich Pflege über die Haltung der anderen Argumente, die Sie nicht brauchen, es in eine Funktion, aber ich habe eine harte Zeit, die denken, eine situation, wo Sie würde niemals wollen, halten die anderen Argumente, es sei denn, Sie haben bereits verarbeitet worden sind, in dem Fall würde ich die Verwendung der Prozess - /shift - /Prozess - /shift - /... - Methode des sequentiellen Verarbeitung.
Gehe ich davon aus, dass Sie hier wollen, Sie zu halten, weil Sie noch nicht folgte die sequenzielle Methode. Diese Methode behandelt auch den Fall, wo es keine Argumente, die Rückgabe "". Du könntest einfach einstellen, dass Verhalten durch einfügen der auskommentierte
else
- Klausel.InformationsquelleAutor der Antwort paxdiablo
Für tcsh:
Ich bin mir ziemlich sicher, das wäre eine tragbare Lösung, außer für die Zuordnung.
InformationsquelleAutor der Antwort Perfect64
Einer Lösung mit
eval
:InformationsquelleAutor der Antwort Mikael S
Nach der Lektüre der Antworten oben schrieb ich eine Q&D-shell-Skript (sollte auf sh und bash) ausführen, g++ auf PGM.cpp produzieren ausführbaren Bild PGM. Es wird davon ausgegangen, dass das Letzte argument auf der Kommandozeile ist der name der Datei (.cpp ist optional) und alle anderen Argumente sind Optionen.
InformationsquelleAutor der Antwort David E.
Wird der folgende Satz
LAST
zum letzten argument ohne änderung der aktuellen Umgebung:Wenn andere Argumente nicht mehr benötigt und können verschoben werden es kann vereinfacht werden zu:
Für die Portabilität Gründen folgende:
kann ersetzt werden durch:
Ersetzen auch
$()
mit backquotes erhalten wir:InformationsquelleAutor der Antwort Paweł Nadolski
Nun muss ich nur einen text ergänzen, da meine Antwort zu kurz war, um post. Ich muss hinzufügen mehr text zu Bearbeiten.
InformationsquelleAutor der Antwort frank1rizzo
Fand ich @AgileZebra Antwort (plus @starfry Kommentar) die meisten nützlich, aber es setzt
heads
einen Skalar. Ein array ist wohl nützlicher:InformationsquelleAutor der Antwort EndlosSchleife
InformationsquelleAutor der Antwort Craig Trader
Dies ist Teil meiner Funktion kopieren:
Zur Verwendung in Skripten, dies zu tun:
Erklärung (tiefste zuerst):
$(echo '$'"$#")
zurück$[nr]
wo[nr]
ist die Anzahl der Parameter. E. g. der string$123
(unausgebreiteten).echo $123
gibt den Wert des 123rd parameter, wenn Sie ausgewertet werden.eval
nur erweitert$123
auf den Wert des Parameters, z.B.last_arg
. Dieser wird als string interpretiert und ausgegeben werden.Arbeiten mit der Bash ab Mitte 2015.
InformationsquelleAutor der Antwort Esavier
Versuchen die unter-Skript zum letzten argument
Ausgabe:
Dank.
InformationsquelleAutor der Antwort Ranjithkumar T
Es ist sehr viel präziser Weg, dies zu tun. Argumente für ein bash-Skript können mitgebracht werden, in einem array, das macht den Umgang mit den Elementen viel einfacher. Das Skript unten wird immer drucken Sie die letzten argument übergeben Sie ein Skript.
Beispiel-Ausgabe
InformationsquelleAutor der Antwort tekbot
Diesem format gearbeitet, bei Slackware und Cygwin.
"${x[@]:(-1)}", wenn verwendet mit $@, "${@:(-1)}"
Es bedeutet, ist: ${@:(N)}, werden wieder alle element nach N index.(sind N),
-1 ist thelast.
InformationsquelleAutor der Antwort zw963
Mittels der parameter-expansion (löschen abgestimmt Anfang):
Es ist auch einfach, um alle vor dem letzten:
InformationsquelleAutor der Antwort Jurij