씨앗으로 무작위로 배쉬를 하시겠습니까?

씨앗으로 무작위로 배쉬를 하시겠습니까?

나는 항상 $((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.

답변2

파티에 늦었는데 "그럼 같은 시드가 주어지면 항상 같은 난수가 출력된다는 건가요?"라는 말을 해야 하는데 이게 이해가 안 되네요.

그것이 당신이 원하는 것이라면 난수가 필요하지 않습니다. 시딩을 건너뛰고 원하는 "동일한 난수"를 사용할 수 있습니다. 작은 따옴표와 큰 따옴표에 관한 것은 아마도 조롱일 것입니다.

일부 댓글은 냉소적이었다고 말씀드리고 싶습니다. 망설임이 너무 오래 걸렸습니다.

RANDOM=$(date +%s);echo $RANDOM; echo $RANDOM; echo $(($RANDOM%1000))

나는 이것이 무작위성만큼 좋은 것이라고 생각합니다. 하지만 420이 너무 많이 나타납니다.

관련 정보