Wie bekomme ich das n
dritte Positionsargument in Bash, wo n
ist variabel?
75
Wie bekomme ich das n
dritte Positionsargument in Bash, wo n
ist variabel?
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
@
(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 findenman bash
, aber beim Scannen nach @ ging mir die Geduld aus. ; PWenn
N
in einer Variablen gespeichert ist, verwenden Sieeval echo \${$N}
wenn es eine ständige Verwendung ist
echo ${12}
schon seit
echo $12
bedeutet nicht dasselbe!
quelle
${12}
und$12
?$12
bedeutet$1
und den Charakter2
.${12}
bedeutet den 12. Parameter.Lesen
Umgang mit Positionsparametern
und
Parametererweiterung
$ 0: der erste Positionsparameter
$ 1 ... $ 9: Die Argumentliste enthält Elemente von 1 bis 9
quelle
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.
quelle
${!n}
war die Antwort, von der ich nichts wusste.