He estado usando $((1 + RANDOM % 1000))
para generar un número aleatorio.
¿Es posible hacer algo similar pero proporcionar una semilla?
Entonces, ¿dada la misma semilla, siempre se generará el mismo número aleatorio?
Asignar un valor semilla a 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
$
Tenga en cuenta que se utilizan comillas simples; las comillas dobles corren reglas de interpolación de 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
$
porque $RANDOM
está siendo interpolado por el shell principal antes de bash -c ...
que se ejecute el proceso secundario . Utilice comillas simples para desactivar la interpolación (como se muestra arriba) o evite la interpolación:
$ 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
$
Esta característica de RANDOM
se menciona en el bash(1)
manual
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")
¿no debería volver lo mismo cada vez? ¿O es porque$(bash ...
no se trata como una nueva instancia de bash?set -x; FOO=42; bash -c "FOO=999; echo $FOO"
. Las comillas dobles permiten que el caparazón externo se reemplace$RANDOM
con el caparazón externo al azar; el shell bash interno simplemente hace eco de un número entero.random=$(bash -c "RANDOM=$mac; echo $RANDOM")
bash -c 'RANDOM=42; echo "$RANDOM" "$RANDOM" "$RANDOM"'
.