已关闭。此问题需要更多focused。目前不接受回答。
**要改进此问题吗?**更新此问题,使其仅针对editing this post的一个问题。
两年前关闭。
Improve this question的
这个问题与Linux上的Debian、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
字符串
如何也:
- 提高随机性
该解决方案是为Linux系统寻找的,在这些系统上还没有安装bash 5.1,因此到目前为止还不能使用SRANDOM。
3条答案
按热度按时间wrrgggsh1#
在给定的随机函数上有什么可以改进的,使它更随机,或者更大的范围,或者别的什么?
因此到目前为止还不能使用SRANDOM。
如果可能的话,如何提高上述函数的随机性?
Sooo用你自己的语义写你自己的SRANDOM。
字符串
然后:
型
接受更大范围的数字
如果你对shell算法扩展的工作方式不满意,那么.使用不同的工具。
bc
计算器具有无限的范围。型
你可以用
getrandom()
编写自己的C程序,并在运行时编译它,echo "int main() { stuff(); }" | gcc -xc - && ./a.out; rm ./a.out
基本上可以为你提供任何你想要的语义。还有其他脚本语言,如perl,python,ruby,它们都有自己的大数字库和urandom数字生成实现。每一个改进都应该只使用bash。
从我的Angular 来看是一个毫无意义的限制-总体而言,我支付的结果,不是真的“如何”我解决问题.无论如何,你可以,给你一堆想法如何进行:
/dev/urandom
读取字节并将其转换为数字。read
的退出状态,因为这个字节可能是零字节或换行符。bc
是普遍可用的。sgtfey8w2#
在主shell中为RANDOM创建种子并期望它在子shell中受到青睐是没有意义的,因为新shell会自己初始化种子。
因此,您需要播种并使用主shell的RANDOM,并将值传递到另一个函数中进行转换。
下面是一个如何让你种子工作的例子:
字符串
oyxsuwqo3#
这就是当问题中的代码和KamilCuk的答案中的代码组合在一个函数中时的样子,以便进行更均匀的随机分布:
字符串
备注:看起来可以使用的范围大于+-32000