Создайте массив с последовательностью чисел в bash

Я хотел бы написать script, который создаст мне массив со следующими значениями:

{0.1 0.2 0.3 ... 2.5}

До сих пор я использовал script следующим образом:

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

Но теперь мне нужно, чтобы список был намного длиннее (но все же с постоянными интервалами).

Есть ли способ создать такой массив в одной команде? Каков наиболее эффективный способ создания такого списка?

Ответ 1

Используя seq, вы можете сказать seq FIRST STEP LAST. В вашем случае:

seq 0 0.1 2.5

Затем это вопрос сохранения этих значений в массиве:

vals=($(seq 0 0.1 2.5))

Затем вы можете проверить значения с помощью:

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

Да, моя локаль настроена на запятую вместо точек для десятичных знаков. Это можно изменить установкой LC_NUMERIC="en_US.UTF-8".

Кстати, brace expansion также позволяет установить приращение. Проблема в том, что она должна быть целым числом:

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

Ответ 2

Bash поддерживает стиль C Для циклов:

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

Ответ 3

Дополняя основной ответ

В моем случае seq был не лучшим выбором.
Для создания последовательности вы также можете использовать утилиту jot. Однако эта команда имеет более сложный синтаксис.

# 1 2 3 4
jot - 1 4

# 3 evenly distributed numbers between 0 and 10
# 0 5 10
jot 3 0 10

# a b c ... z
jot -c - 97 122