2009-09-30 12 views

Odpowiedz

85

Skorzystaj Bash wyposażone wskazanie pośrednie:

#!/bin/bash 
n=3 
echo ${!n} 

Uruchomienie tego pliku:

$ ./ind apple banana cantaloupe dates 

produkuje:

cantaloupe 

Edit:

Można również zrobić tablicy krojenie:

echo ${@:$n:1} 

ale nie indeksy tablicy:

echo ${@[n]} # WON'T WORK 
+7

Czy ktoś może wyjaśnić, dlaczego $ {@ [n]} nie działa? –

+1

@AlexanderOleynikov Powoduje błąd "złe zastąpienie"; Zakładam, że '@' (i '*') są "Parametry specjalne" i ponieważ nie są poprawnymi nazwami macierzy? '$ {@}' * does * odnosi się do parametrów ponumerowanych, ale '@' nie jest tablicą i nie jest zaimplementowana obsługa, aby parsować ją jako taką, podczas gdy np. "' $ {unsetvariable} '" dałoby puste wyjście, ponieważ jest poprawną nazwą tablicy/zmiennej, po prostu nie jest jeszcze ustawione (i te wyjątki są specjalnie obsługiwane w kodzie źródłowym basha, jak sądzę). Próbowałem znaleźć lepszy powód w "man bash", ale skanowanie dla @ spowodowało, że zabrakło mi cierpliwości. ; P –

4
$1 $2 ... $n 

$0 zawiera nazwę skryptu.

0

Jak widać w Bash by Example, wystarczy użyć automatycznych zmiennych 1 $, 2 $ i tak dalej.

$ # służy do uzyskania liczby argumentów.

-1

Czytaj

Handling positional parameters

i

Parameter expansion

$ 0: pierwszy pozycyjny parametr

$ 1 ... $ 9: elementy listy argumentów od 1 do 9

+0

ta odpowiedź nie rozwiązuje oryginalne pytanie OP. Specjalnie zapytał, jak uzyskać parametr według indeksu przechowywanego w zmiennej. –

8

Jeśli N jest zapisana w zmiennej, użyj

eval echo \${$N} 

jeśli jest to stały użycie

echo ${12} 

od

echo $12 

nie znaczy to samo!

+0

Jaka jest różnica między '$ {12}' a '$ 12'? – HelloGoodbye

+3

Witam @HelloGoodbye, '$ 12' oznacza' $ 1' i znak '2'. '$ {12}" oznacza 12. parametr. –

Powiązane problemy