为什么我为bash中的所有迭代获得echo $ RANDOM的相同值?

时间:2017-08-29 04:29:57

标签: bash loops random

bash脚本:

for c in $( seq 1 10) 
do
   echo "random value #$c:$(echo "$RANDOM")" 
done

输出:

random value #1:20892
random value #2:20892
random value #3:20892
random value #4:20892
random value #5:20892
random value #6:20892
random value #7:20892
random value #8:20892
random value #9:20892
random value #10:20892

1 个答案:

答案 0 :(得分:0)

除非您使用的是bash的旧版本,否则绝对没有理由诉诸seq来生成您的序列。

此外,像echo $(echo something)这样的内容完全是不必要的。

更改这两个问题的脚本:

for c in {1..10} ; do
   echo "random value #$c:$RANDOM"
done

为您提供生成正确数据的内容:

random value #1:3394
random value #2:6099
random value #3:21492
random value #4:17973
random value #5:22698
random value #6:15844
random value #7:28506
random value #8:1960
random value #9:23593
random value #10:17412

而且,实际上,您的原始脚本也可以运行(至少在bash 4.3.46中),所以我猜你可能无意中在某个地方填写了RANDOM变量。您应该知道,取消设置“变量”可能会导致以后使用它的问题,并将其设置为特定值使种子生成器。

因此,我会在bash每shell启动脚本中寻找可能将RANDOM设置为特定值的内容。由于$(echo $RANDOM)事件,所述脚本将被执行,如果您直接回显该值,则可以修复该脚本。

根据以下演示,这肯定会引起您的问题:

for c in {1..5} ; do
    RANDOM=7
    echo "random value #$c:$RANDOM"
done

给出:

random value #1:19345
random value #2:19345
random value #3:19345
random value #4:19345
random value #5:19345