在bash中创建一个包含数字序列的数组

时间:2016-09-01 09:32:25

标签: arrays bash

我想写一个脚本,它将创建一个包含以下值的数组:

{0.1 0.2 0.3 ... 2.5}

到目前为止,我使用的脚本如下:

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

但是现在我需要更长的列表(但仍然保持不变的间隔)。

有没有办法在一个命令中创建这样的数组?创建这样一个列表的最有效方法是什么?

3 个答案:

答案 0 :(得分:21)

使用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

答案 1 :(得分:4)

Bash支持C样式For循环:

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

答案 2 :(得分:0)

补充主要答案

就我而言,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