種子でランダムにバッシュをしますか?

種子でランダムにバッシュをしますか?

私は常に$((1 + RANDOM % 1000))乱数を生成するために使用します。

同様のことをしながら種子を提供することは可能ですか?

では、同じシードが与えられると、常に同じ乱数が出力されますか?

ベストアンサー1

シード値の割り当て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
$ 

一重引用符を使用すると、シェル補間規則に違反します。

$ 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
$ 

$RANDOM親シェルは、子プロセスが実行される前に補間を実行するためです。bash -c ...上記のように補間をオフにしたり、補間を防ぐには、単一引用符を使用します。

$ 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
$ 

RANDOMこの機能はマニュアルに記載されていますbash(1)

   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.

おすすめ記事