系统是:
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 变量(来自)感到困惑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
其他各种 shell 都提供RANDOM
内置变量,但我不知道有哪个 shell 也有类似的名为URANDOM
.您还没有告诉我们您正在使用什么 shell,但根据您显示的输出,您的 shell 也不提供它,因此您所做的只是回显空字符串。
我怀疑您实际上正在考虑/dev/random
和/dev/urandom
,这是完全不同的事情。您可能想阅读其中一些内容: