Wie bekomme ich das n
dritte Positionsargument in Bash, wo n
ist variabel?
Antworten:
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
Wenn N
in 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!
${12}
und $12
?
$12
bedeutet $1
und den Charakter 2
. ${12}
bedeutet den 12. Parameter.
Lesen
Umgang mit Positionsparametern
und
$ 0: der erste Positionsparameter
$ 1 ... $ 9: Die Argumentliste enthält Elemente von 1 bis 9
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.
${!n}
war die Antwort, von der ich nichts wusste.
@
(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. ; P