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

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!


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


-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.


Sie haben die Frage leider nicht verstanden; ${!n}war die Antwort, von der ich nichts wusste.
Michael Shigorin
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.