2016-09-01 13 views
5

Chciałbym napisać skrypt, który stworzy mi tablicę z następujących wartości:Utwórz tablicę z sekwencji liczb w bash

{0.1 0.2 0.3 ... 2.5} 

Do tej pory używałem skryptu następująco:

plist=(0.1 0.2 0.3 0.4) 
for i in ${plist[@]}; do 
    echo "submit a simulation with this parameter:" 
    echo "$i" 
done 

Ale teraz potrzebuję, aby lista była znacznie dłuższa (ale wciąż ze stałymi przerwami).

Czy istnieje sposób utworzenia takiej tablicy w jednym poleceniu? jaki jest najbardziej skuteczny sposób tworzenia takiej listy?

+1

jeśli przerwa jest stała, to dlaczego nie zrobić funkcję, która pobiera indeks i zwraca wartość przez obliczenie go? –

+1

Komenda 'seq', jeśli interwał jest stały. – Jdamian

Odpowiedz

11

Używając seq możesz powiedzieć seq FIRST STEP LAST. W twoim przypadku:

seq 0 0.1 2.5 

to jest to kwestia przechowywania tych wartości w tablicy:

vals=($(seq 0 0.1 2.5)) 

Następnie można sprawdzić wartości z:

$ printf "%s\n" "${vals[@]}" 
0,0 
0,1 
0,2 
... 
2,3 
2,4 
2,5 

Tak, mój lokalizacji jest ustawiona na przecinkach zamiast kropek na cyfry dziesiętne. Można to zmienić ustawienie LC_NUMERIC="en_US.UTF-8".

Nawiasem mówiąc, brace expansion pozwala także ustawić inkrement. Problemem jest to, że musi być liczbą całkowitą:

$ echo {0..15..3} 
0 3 6 9 12 15 
3

Bash obsługuje C styl pętli:

$ for ((i=1;i<5;i+=1)); do echo "0.${i}" ; done 
0.1 
0.2 
0.3 
0.4