시스템은 다음과 같습니다:
pi@titania:~ $ cat /etc/os-release
PRETTY_NAME="Raspbian GNU/Linux 10 (buster)"
NAME="Raspbian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=raspbian
ID_LIKE=debian
HOME_URL="http://www.raspbian.org/"
SUPPORT_URL="http://www.raspbian.org/RaspbianForums"
BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"
pi@titania:~ $ uname -a
Linux titania.####.net 5.10.103-v7l+ #1529 SMP Tue Mar 8 12:24:00 GMT 2022 armv7l GNU/Linux
난수를 생성할 때 RANDOM과 URANDOM 사이에 서로 다른 동작이 관찰되었습니다. 재치 있게:
pi@titania:~ $ echo $URANDOM | md5sum | head -c 20; echo;
68b329da9893e34099c7
pi@titania:~ $ echo $URANDOM | md5sum | head -c 20; echo;
68b329da9893e34099c7
pi@titania:~ $ echo $URANDOM | md5sum | head -c 20; echo;
68b329da9893e34099c7
pi@titania:~ $ echo $RANDOM | md5sum | head -c 20; echo;
a5355860c5367e0dc179
pi@titania:~ $ echo $RANDOM | md5sum | head -c 20; echo;
521938e64c42075b2b92
pi@titania:~ $ echo $RANDOM | md5sum | head -c 20; echo;
03505fd360ab7ae8378d
URANDOM은 결정론적인 방식으로 동일한 출력을 생성하는 반면, RANDOM은 그렇지 않고 매번 예상과 다른 결과를 반환합니다.
나는 URANDOM을 가능한 한 많이 사용하고 싶었기 때문에 이것이 내 관심을 불러일으켰습니다.
왜 이런 차이가 발생하는지 아는 사람이 있나요?
존 스프링거
답변1
변수 $URANDOM
가 비어 있습니다.
$ echo '' | md5sum | head -c 20; echo;
68b329da9893e34099c7
RANDOM
나는 당신이 bash 변수에 대해 혼란스러워한다고 생각합니다 (from man bash
:
RANDOM Each time this parameter is referenced, it expands to a random
integer between 0 and 32767. Assigning a value to RANDOM ini‐
tializes (seeds) the sequence of random numbers. If RANDOM is
unset, it loses its special properties, even if it is subse‐
quently reset.
bash
다양한 다른 쉘이 RANDOM
내장 변수를 제공 하지만 비슷한 이름의 변수가 있는 쉘은 알지 못합니다 URANDOM
. 어떤 쉘을 사용하고 있는지는 알려주지 않았지만 표시된 출력에 따르면 쉘은 그것도 제공하지 않으므로 당신이 하고 있는 일은 빈 문자열을 에코하는 것뿐입니다.
나는 당신이 실제로 완전히 다른 것에 /dev/random
대해 생각하고 있다고 생각합니다. /dev/urandom
다음 중 일부를 읽어 보시기 바랍니다: