Wie bekomme ich das n-te Positionsargument in bash?

Antworten:

109

Verwenden Sie die Indirektionsfunktion von Bash:

#!/bin/bash
n=3
echo ${!n}

Ausführen dieser Datei:

$ ./ind apple banana cantaloupe dates

Produziert:

cantaloupe

Bearbeiten:

Sie können auch Array-Slicing durchführen:

echo ${@:$n:1}

aber keine Array-Indizes:

echo ${@[n]}  #  WON'T WORK
Bis auf weiteres angehalten.
quelle
1
@AlexanderOleynikov Es verursacht einen Fehler "schlechte Substitution"; Ich nehme an, weil @(und *) "spezielle Parameter" sind und weil sie keine gültigen Array-Namen sind? ${@} bezieht sich zwar auf die nummerierten Parameter, @ist jedoch kein Array, und es wird keine Unterstützung implementiert, um es als solches zu analysieren, wohingegen z. B. " ${unsetvariable}" eine leere Ausgabe erzeugen würde, da es sich um einen gültigen Array- / Variablennamen handelt, der nur noch nicht festgelegt wurde (und diese Ausnahmen sind speziell im Quellcode von bash behandelt, denke ich). Ich habe versucht, einen besseren Grund zu finden man bash, aber beim Scannen nach @ ging mir die Geduld aus. ; P
Victor Zamanian
12

Wenn Nin einer Variablen gespeichert ist, verwenden Sie

eval echo \${$N}

wenn es eine ständige Verwendung ist

echo ${12}

schon seit

echo $12

bedeutet nicht dasselbe!

Johannes Weiss
quelle
1
Was ist der Unterschied zwischen ${12}und $12?
HelloGoodbye
3
Hallo @HelloGoodbye, $12bedeutet $1und den Charakter 2. ${12}bedeutet den 12. Parameter.
Johannes Weiss
-2

Lesen

Umgang mit Positionsparametern

und

Parametererweiterung

$ 0: der erste Positionsparameter

$ 1 ... $ 9: Die Argumentliste enthält Elemente von 1 bis 9

rahul
quelle
Diese Antwort geht nicht auf die ursprüngliche Frage von OP ein. Er fragte speziell, wie man einen Parameter anhand seines in einer Variablen gespeicherten Index erhält.
Marcel Valdez Orozco
-3

Wie Sie im Bash by Example sehen können , müssen Sie nur die automatischen Variablen $ 1, $ 2 usw. verwenden.

$ # wird verwendet, um die Anzahl der Argumente abzurufen.

Zen
quelle
Sie haben die Frage leider nicht verstanden; ${!n}war die Antwort, von der ich nichts wusste.
Michael Shigorin