Wie bekomme ich das ndritte Positionsargument in Bash, wo nist 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 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!
${12}und $12?
$12bedeutet $1und 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