Bash随机变量=不是随机的?

时间:2015-04-21 00:34:33

标签: bash variables random

我想生成一个随机小数,该小数四舍五入到.1和1之间的第10位。

我用命令

做了这个
`echo "scale=1; $(( ( RANDOM % 10 ) + 1 ))/10" | bc -l`

现在,如果您将其设置为变量,请说

var=`echo "scale=1; $(( ( RANDOM % 10 ) + 1 ))/10" | bc -l`

让你的脚本像这样回复var,

#!/bin/bash
var=`echo "scale=1; $(( ( RANDOM % 10 ) + 1 ))/10" | bc -l`
echo $var
echo $var
echo $var

重复相同的小数,比如.4,但是如果你

#!/bin/bash
echo `echo "scale=1; $(( ( RANDOM % 10 ) + 1 ))/10" | bc -l`
echo `echo "scale=1; $(( ( RANDOM % 10 ) + 1 ))/10" | bc -l`
echo `echo "scale=1; $(( ( RANDOM % 10 ) + 1 ))/10" | bc -l`

它将使用与

相同的命令为您提供三个随机数
$var=`echo "scale=1; $(( ( RANDOM % 10 ) + 1 ))/10" | bc -l`

为什么如果给出相同的命令但是作为变量,Bash不会生成三个新数字?

2 个答案:

答案 0 :(得分:4)

以下命令设置var的值:

var=`echo "scale=1; $(( ( RANDOM % 10 ) + 1 ))/10" | bc -l`

设置值后,它不会更改。因此,无论你多次看到它,它都是一样的:

echo $var
echo $var
echo $var

获取新值的唯一方法是让bash再次评估RANDOM

使用函数

您可能更喜欢在每次调用时返回不同随机变量的函数:

$ var() { echo "scale=1; $(( ( RANDOM % 10 ) + 1 ))/10" | bc -l; }
$ var
.3
$ var
.4
$ var
1.0
$ var
.4

答案 1 :(得分:2)

这是因为

var=`echo "scale=1; $(( ( RANDOM % 10 ) + 1 ))/10" | bc -l`

执行echo命令,将其输出存储到变量中。命令本身仅由bash解释器评估一次。

如果您想要一种紧凑的方式来生成随机数,我建议使用函数

#!/bin/bash
myRandom(){
    echo "scale=1; $(( ( RANDOM % 10 ) + 1 ))/10" | bc -l
}

echo $(myRandom)
echo $(myRandom)
echo $(myRandom)