web-dev-qa-db-fra.com

Créer un tableau avec une séquence de nombres en bash

Je voudrais écrire un script qui me créera un tableau avec les valeurs suivantes:

{0.1 0.2 0.3 ... 2.5}

Jusqu'à présent, j'utilisais un script comme suit:

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

Mais maintenant, j'ai besoin que la liste soit beaucoup plus longue (mais toujours à intervalles constants).

Existe-t-il un moyen de créer un tel tableau en une seule commande? quelle est la manière la plus efficace de créer une telle liste?

14
jarhead

En utilisant seq vous pouvez dire seq FIRST STEP LAST. Dans ton cas:

seq 0 0.1 2.5

Il s'agit ensuite de stocker ces valeurs dans un tableau:

vals=($(seq 0 0.1 2.5))

Vous pouvez ensuite vérifier les valeurs avec:

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

Oui, mes paramètres régionaux sont définis pour avoir des virgules au lieu de points pour les décimales. Ce paramètre peut être modifié LC_NUMERIC="en_US.UTF-8".

Soit dit en passant, expansion de l'accolade permet également de définir un incrément. Le problème est qu'il doit s'agir d'un entier:

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

Bash prend en charge le style C pour les boucles:

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