Jak uzyskać argument pozycji pozycyjnej n
w bash?Jak uzyskać n-ty argument pozycji w bash?
Dzięki.
Edytuj: Zapomniałem powiedzieć, ale miałem na myśli, że n
jest zmienną.
Jak uzyskać argument pozycji pozycyjnej n
w bash?Jak uzyskać n-ty argument pozycji w bash?
Dzięki.
Edytuj: Zapomniałem powiedzieć, ale miałem na myśli, że n
jest zmienną.
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
$1 $2 ... $n
$0
zawiera nazwę skryptu.
Jak widać w Bash by Example, wystarczy użyć automatycznych zmiennych 1 $, 2 $ i tak dalej.
$ # służy do uzyskania liczby argumentów.
Czytaj
Handling positional parameters
i
$ 0: pierwszy pozycyjny parametr
$ 1 ... $ 9: elementy listy argumentów od 1 do 9
ta odpowiedź nie rozwiązuje oryginalne pytanie OP. Specjalnie zapytał, jak uzyskać parametr według indeksu przechowywanego w zmiennej. –
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!
Jaka jest różnica między '$ {12}' a '$ 12'? – HelloGoodbye
Witam @HelloGoodbye, '$ 12' oznacza' $ 1' i znak '2'. '$ {12}" oznacza 12. parametr. –
Czy ktoś może wyjaśnić, dlaczego $ {@ [n]} nie działa? –
@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 –