2012-01-02 7 views
6

Próbuję zadeklarować zmienną x ze wszystkimi znakami od a..x. W wierszu poleceń (bash) zastąpienie a..x działa bez żadnych tyknięć.Sposób korzystania z podstawiania Bash w deklaracji zmiennej

$ echo {a..x} 
a b c d e f g h i j k l m n o p q r s t u v w x 

Ale przypisanie go do zmiennej poprzez x={a..x} skutkuje {a..x} jako ciąg. Działa tylko x=$(echo {a..x}).

Pytanie brzmi: czy to jest właściwy sposób przydzielania zadań, czy też muszę robić inne rzeczy?

Głównym celem jest przypisać sekwencję do tablicy, np

disks=($(echo {a..x})) 
+1

klamra ekspansja nie na zlecenie, ponieważ pro nalicza listę, a zmienna przyjmuje tylko wartość skalarną; bash jest "inteligentny" w tym znaczeniu, ponieważ wie, że nie może przypisać listy do zmiennej, więc nie rozszerza jej wszystkich, to jest ten sam powód, dla którego można przypisać zmienne zawierające spacje bez ich zacytowania, ponieważ jest to bash o wartości skalarnej nie stosuje dzielenia wyrazów na zawartość, nawet jeśli jest niecytowana. tablica jednak akceptuje listę iw takim przypadku dzieje się zarówno rozwijanie nawiasów, jak i dzielenie słów. –

Odpowiedz

5

Można również użyć set (ale pamiętaj, aby zapisać parametrów pozycyjnych, jeśli jeszcze ich potrzebujemy):

set {a..x} 
x="[email protected]" 

Dla tablic, rozwijanie nawiasów działa bezpośrednio:

disks=({a..x}) 
+0

'd = ({a..x}); echo $ d' na cmdline, jak również w skrypcie, skutkuje 'a' tylko – tuergeist

+1

@tuergeist, spróbuj' echo $ {d [@]} 'lub' echo $ {d [*]} 'http: // tldp. org/LDP/abs/html/arrays.html –

+0

@akk: Dzięki! Oczywiście, tylko 'd' wskazuje tylko na pierwszy element. – tuergeist

Powiązane problemy