我想生成一个随机小数,该小数四舍五入到.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不会生成三个新数字?
答案 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)