J'utilise $((1 + RANDOM % 1000))
pour générer un nombre aléatoire.
Est-il possible de faire quelque chose de similaire mais de fournir une graine?
Donc, étant donné la même graine, le même nombre aléatoire sera toujours affiché?
Attribuez une valeur de départ à RANDOM
$ bash -c 'RANDOM=640; echo $RANDOM $RANDOM $RANDOM'
28612 27230 24923
$ bash -c 'RANDOM=640; echo $RANDOM $RANDOM $RANDOM'
28612 27230 24923
$ bash -c 'RANDOM=640; echo $RANDOM $RANDOM $RANDOM'
28612 27230 24923
$
Notez que des guillemets simples sont utilisés; les guillemets doubles exécutent les règles d'interpolation du shell:
$ bash -c 'RANDOM=42; echo $RANDOM $RANDOM $RANDOM'
19081 17033 15269
$ RANDOM=42
$ bash -c "RANDOM=640; echo $RANDOM"
19081
$ bash -c "RANDOM=640; echo $RANDOM"
17033
$ bash -c "RANDOM=640; echo $RANDOM"
15269
$
car $RANDOM
est interpolé par le shell parent avant l' bash -c ...
exécution du processus enfant . Utilisez des guillemets simples pour désactiver l'interpolation (comme indiqué ci-dessus) ou empêchez l'interpolation:
$ RANDOM=42
$ SEED_FOR_MY_GAME=640
$ bash -c "RANDOM=$SEED_FOR_MY_GAME; echo \$RANDOM"
28612
$ bash -c "RANDOM=$SEED_FOR_MY_GAME; echo \$RANDOM"
28612
$
Cette fonctionnalité RANDOM
est mentionnée dans le bash(1)
manuel
RANDOM Each time this parameter is referenced, a random integer between
0 and 32767 is generated. The sequence of random numbers may be
initialized by assigning a value to RANDOM. If RANDOM is unset,
it loses its special properties, even if it is subsequently
reset.
random=$(bash -c "RANDOM=640; echo $RANDOM")
cela ne devrait-il pas revenir à chaque fois? Ou est-ce parce que le$(bash ...
n'est pas traité comme une nouvelle instance de bash?set -x; FOO=42; bash -c "FOO=999; echo $FOO"
. Les guillemets doubles permettent à la coque extérieure de remplacer$RANDOM
par la coque externe aléatoire; le shell bash interne fait simplement écho à un entier.random=$(bash -c "RANDOM=$mac; echo $RANDOM")
bash -c 'RANDOM=42; echo "$RANDOM" "$RANDOM" "$RANDOM"'
.