2017-08-29 35 views
-1

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 
+0

请看看[编辑的帮助(HTTP://计算器。 COM /编辑 - 帮助)。 – Cyrus

+1

你究竟是怎么调用脚本的?换句话说,您用来运行脚本的命令行是什么? – John1024

+0

我可以用bash 4.3.8来重现这一点,只有这样:'for $ in $(seq 1 10);' do echo“random value#$ c:$(RANDOM = 42; echo”$ RANDOM“)”;完成' – Cyrus

回答

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 
+0

我认为这是我使用的一些旧版本的bash。我无法在循环中使用{1..10},因此不得不求助于seq。 – amar

+0

@amar,对于这样一个小序列,你可以使用'for i in 1 2 3 4 5;做...'。 – paxdiablo

相关问题