gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 02:51:48 26 4
gpt4 key购买 nike

这是脚本:

#!/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)。

最佳答案

RANDOM A simple random number generator. Every time RANDOM is referenced, it is assigned the next number in a random number series.
The point in the series can be set by assigning a number to RANDOM (see rand(3)).



这是因为您将代码包装在子 shell 中。当父 shell 调用子 shell 时,即使 for 循环使用它 6 次,它也仅将其计为对 $RANDOM 的一次引用。当父 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 也没有这种行为。

关于unix - 为什么 $RANDOM 在 shell 脚本中的两个 for 循环中生成类似的值序列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4672904/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com