【发布时间】:2021-05-26 17:45:47
【问题描述】:
这个问题与 Debian 或 Ubuntu 等 Linux、bash 和使用 RANDOM 的给定函数有关。
每项改进都应仅使用 bash。
给出以下函数:
getRND(){
min="${1:-1}" ## min is the first parameter, or 1 if no parameter is given
max="${2:-100}" ## max is the second parameter, or 100 if no parameter is given
rnd_count=$((RANDOM%(max-min+1)+min));
echo "$rnd_count"
}
var=$(getRND -10 10) # Call the function
echo $var # output
如何:
- 提高随机性
该解决方案适用于尚未安装 bash 5.1 的 Linux 系统,因此到目前为止还不能使用 SRANDOM。
【问题讨论】:
-
RANDOM=$(date +%s)? -
当您将 statement 评估为
$(statement)时,它会在具有自己的随机种子和相应的伪随机序列的子shell 中进行评估。所以我建议你在主shell中获取随机值并将其传递给函数进行规范化。 -
您的问题反映了关于 PRNG 和种子的概念错误。所有 PRNG 都是从一个状态前进到下一个状态的算法,并且由于所涉及的位数是有限的,最终你会重复一个状态,然后它一直都是重复的。换句话说,所有 PRNG 序列都可以被视为大循环。种子用于设置初始状态,即它所做的只是选择循环的入口点。没有种子使 PRNG 比任何其他种子“更随机”。随机性的模仿内置于状态转换算法中,它不依赖于种子。
-
no Terminal 5.1-> 没有 bash 5.1 -
请不要破坏您自己的帖子。当您在此处发布时,即表示您授予 SO 在 CC-by SA 4.0 下分发内容的权利。任何破坏行为都将被撤销。
标签: linux bash function random random-seed