以下是一段脚本,我期望它会生成同一对数字三次:
最终,我想要能够做到这样:
我该如何修改后面的脚本,以便每次运行时输出相同的结果?
#! /usr/bin/env bash
RANDOM=5
echo " first" $RANDOM
echo "second" $RANDOM
echo
RANDOM=5
echo " first" $RANDOM
echo "second" $RANDOM
echo
RANDOM=5
echo "??????" $RANDOM | cat
echo " first" $RANDOM
相反,将输出导入管道会导致随机种子失效。为什么呢?
first 18499
second 9909
first 18499
second 9909
?????? 843
first 18499
最终,我想要能够做到这样:
#! /usr/bin/env bash
n=3
for i in $( seq $n) ; do
RANDOM=5
echo $RANDOM | md5sum | cut -d' ' -f1
done
我该如何修改后面的脚本,以便每次运行时输出相同的结果?
<( )
确实会创建一个子shell。@JohnKugelman 我不明白为什么,但你的方法对我也不起作用(它的行为就像<<<
字符串在子shell中被评估一样,尽管显然不应该这样)。我已经在bash v4.4.19、4.2.10和v3.2.57中进行了测试。 - Gordon Davisson$RANDOM
的输出基于先前的$RANDOM
值,因此如果让您的 shell 初始化它,那么很难预测。如果您在某个时候自己设置它,那么它之后每次的行为都将相同(除非您调用新的 shell,这会为该 shell 创建一个新的不可预测的值)。它仍然不是一个非常好的随机源,因为一旦您知道它在某个时间的值,就可以预测其在随后的时间的值。如果您需要真正的随机性,/dev/urandom 是更好的选择。 - MatrixManAtYrServicei = 0; echo $((++i)); echo $i
与i = 0; cat<<<$((++i)); echo $i
进行对比。 - rici