这是脚本:
#!/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)。
答案 0 :(得分:3)
RANDOM 一个简单的随机数 发电机。每次RANDOM都是 引用,它被分配给下一个 随机数系列中的数字。
关键点 在系列中可以通过为RANDOM分配一个数字来设置(参见 兰特(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
注意:即使使用子shell, Bash也没有这种行为。