我想编写一个脚本,它将创建一个包含以下值的数组:
{0.1 0.2 0.3 ... 2.5}
Run Code Online (Sandbox Code Playgroud)
到目前为止,我使用的脚本如下:
plist=(0.1 0.2 0.3 0.4)
for i in ${plist[@]}; do
echo "submit a simulation with this parameter:"
echo "$i"
done
Run Code Online (Sandbox Code Playgroud)
但现在我需要更长的列表(但仍然有恒定的间隔).
有没有办法在单个命令中创建这样的数组?创建这样一个列表的最有效方法是什么?
fed*_*qui 25
用seq你可以说seq FIRST STEP LAST.在你的情况下:
seq 0 0.1 2.5
Run Code Online (Sandbox Code Playgroud)
然后将这些值存储在数组中:
vals=($(seq 0 0.1 2.5))
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用以下方法检查值:
$ printf "%s\n" "${vals[@]}"
0,0
0,1
0,2
...
2,3
2,4
2,5
Run Code Online (Sandbox Code Playgroud)
是的,我的语言环境设置为逗号而不是小数点.这可以改变设置LC_NUMERIC="en_US.UTF-8".
顺便说一下,大括号扩展也允许设置增量.问题是它必须是一个整数:
$ echo {0..15..3}
0 3 6 9 12 15
Run Code Online (Sandbox Code Playgroud)
Bash 支持 C 风格的 For 循环:
$ for ((i=1;i<5;i+=1)); do echo "0.${i}" ; done
0.1
0.2
0.3
0.4
Run Code Online (Sandbox Code Playgroud)