Bash 5.1引入了SRANDOM
变量,但是像这样使用它有什么区别吗?
for i in {1..10}; do
nbr=$((RANDOM%50))
nbr1=$((SRANDOM%50))
echo "$nbr -- $snbr"
done
9 -- 21
35 -- 43
27 -- 15
7 -- 24
41 -- 31
37 -- 35
23 -- 47
14 -- 23
9 -- 37
6 -- 30
来自手册:
RANDOM
每次引用此参数时,它都会扩展为0到32767之间的随机整数。给这个变量赋值会启动随机数生成器。如果未设置RANDOM,则即使稍后重置它,它也会失去其特殊属性。
SRANDOM
每次引用此变量时,它都会扩展为32位伪随机数。在支持/dev/urandom或arc4random的系统上,随机数生成器不是线性的,所以返回的每个数字与其前面的数字没有任何关系。无法对随机数生成器进行种子处理,因此对该变量的赋值不起作用。如果未设置SRANDOM,则即使稍后重置它,它也会失去其特殊属性。
我不理解“非线性”和“种子处理”的含义,但是针对我的例子是否有必要使用RANDOM
还是SRANDOM
,有差别吗?
RANDOM
可以用来创建可以精确复现的结果,这对于调试和验证非常方便。而使用SRANDOM
就无法做到这一点,其结果总是会有所不同。 - kvantour