由于问题要求整数between 1 和0,因此有这种极其随机且非常快速的方法。肯定是一个很好的单线:
echo "0.$(printf $(date +'%N') | md5sum | tr -d '[:alpha:][:punct:]')"
当在 for 循环中抛出 10 次迭代时,此命令将为您提供与此类似的输出:
0.97238535471032972041395
0.8642459339189067551494
0.18109959700829495487820
0.39135471514800072505703651
0.624084503017958530984255
0.41997456791539740171
0.689027289676627803
0.22698852059605560195614
0.037745437519184791498537
0.428629619193662260133
如果您需要打印 1 和 0 的随机字符串,正如其他人所假设的那样,您可以对命令稍作更改,如下所示:
printf $(date +'%N') | sha512sum | tr -d '[2-9][:alpha:][:punct:]'
当被扔进具有 10 次迭代的 for 循环时,这将产生与此类似的随机 0 和 1 的输出:
011101001110
001110011011
0010100010111111
0000001101101001111011111111
1110101100
00010110100
1100101101110010
101100110101100
1100010100
0000111101100010001001
据我所知,根据我在网上找到的信息,这是我们可以在 bash 中获得的最接近真正随机性的方法。我什至做了一个骰子游戏(骰子有 10 面 0-9)来测试随机性,使用这种方法生成从 0 到 9 的单个数字。在 100 次骰子投掷中,每一方都几乎完美地落下 10 次。在 1000 次投掷中,每一方的命中次数约为 890-1100 次。投掷 1000 次后,哪边落地的变化不大。所以你可以非常确定这种方法是非常理想的,至少对于生成伪随机数的 bash 工具来说是这样。
如果您只需要一个绝对令人难以置信的荒谬随机性,那么简单的md5sum checksum 命令可以自行组合很多次,并且仍然非常快。举个例子:
printf $(date +'%N') | md5sum | md5sum | md5sum | tr -d '[:punct:][:space:]'
这将有一个非随机数,通过打印date 命令的纳秒选项获得,并通过管道传输到md5sum。然后将该 md5 哈希通过管道传输到md5sum,然后最后一次将“那个”哈希发送到md5sum。输出是一个完全随机的哈希,您可以使用awk、sed、grep 和tr 等工具来控制要打印的内容。
希望这会有所帮助。