Unix 为什么$RANDOM会在shell脚本中的两个for循环内生成类似的值序列?

Unix 为什么$RANDOM会在shell脚本中的两个for循环内生成类似的值序列?,unix,scripting,ksh,Unix,Scripting,Ksh,以下是脚本: #!/bin/ksh (for k in $(seq 6); do echo $RANDOM; done) > a.txt (for k in $(seq 6); do echo $RANDOM; done) > b.txt echo a.txt cat a.txt echo b.txt cat b.txt 以及一个输出示例: a.txt 9059 1263 29119 14797 5784 24389 b.txt 1263 29119 14797 5784 243

以下是脚本:

#!/bin/ksh

(for k in $(seq 6); do echo $RANDOM; done) > a.txt
(for k in $(seq 6); do echo $RANDOM; done) > b.txt
echo a.txt
cat a.txt
echo b.txt
cat b.txt
以及一个输出示例:

a.txt
9059
1263
29119
14797
5784
24389
b.txt
1263
29119
14797
5784
24389
26689
注意,生成的两个数字序列重叠(即,两者都包含序列1263、29119、14797、5784、24389)

随机一个简单的随机数 发电机。每次都是随机的 引用时,将为其指定下一个 随机数系列中的数字。
重点 在序列中,可以通过将数字指定给随机数来设置(请参见 兰特(3))

这是因为您将代码包装在子shell中。当父shell调用子shell时,它只将其作为$RANDOM的一个引用进行计数,即使for循环使用它6次。当父shell调用第二个子shell时,它从随机序列中的下一个数字开始,这就是为什么您看到两个输出流被一个输出流分开的原因。如果移除子shell,这种行为就会消失

试试这个:

for k in $(seq 6); do echo $RANDOM; done > a.txt
for k in $(seq 6); do echo $RANDOM; done > b.txt
注意:Bash即使使用子shell也没有这种行为