2017-03-23 3 views

Antwort

3

Zur Ergänzung codeforester's helpful answer:

Wenn Sie nur Positions Parameter in Ihrer Funktion zugreifen müssen, Sie Array-Syntax können Sie die Parameter von Interesse zu extrahieren; Array Slicing Syntax tut Unterstützung Ausdrücke Arithmetik:

> function f(){ i=1; echo "${@: i+1 : 1}" ; }; f a b 
b 
3

Sieht aus wie Bash erlaubt keinen Ausdruck in variabler Indirektion. Wie wäre es, den Wert von i Erhöhen, bevor es in Klammer Expansion, wie dies mit:

function f() { i=2; echo "${!i}"; } 

Von Bash Handbuch:

$ $ {prefix @!}

{prefix *!} Erweitert sich auf die Namen von Variablen, deren Namen mit einem Präfix beginnen, getrennt durch das erste Zeichen der IFS-Sondervariablen. Wenn '@' verwendet wird und die Erweiterung in doppelten Anführungszeichen angezeigt wird, wird jeder Variablenname in ein separates Wort erweitert.

+1

Ich glaube nicht, dies ist das richtige Zitat aus dem Handbuch. Diese erweitern sich zu Arrays der * Variablennamen *, die mit * 'Präfix' * beginnen. Das richtige Zitat ist der vierte Absatz von [Parametererweiterung] (https://www.gnu.org/software/bash/manual/bash.html#Shell-Parameter-Expansion), wobei '$ {! Prefix *}' and '$ {! prefix @}' werden eigentlich als Ausnahmen von der Regel erwähnt. –

Verwandte Themen