在三个数字(10、100和1000)中随机选择的变量


19

是否有可能从三个预定数字中选择一个随机数的变量?

样品:

var= 10 or 100 or 1000

1
我不在UNIX中编程,所以无法编写代码,但是这里是另一种方法:val = left(“ 1000”,length = Random 2 to 4)。要具有三个不相关的值,代码将是相似的。
Sensii Miller

Answers:


31

使用数组保存值,然后使用内置变量在其中进行选择$RANDOM。例如,

x[0]=10     # One decade
x[1]=100    # One century
x[2]=1000   # One millennium

for ((i=1; i < 20; ++i)); do echo -n " ${x[$RANDOM%3]}"; done; echo
1000 10 10 10 10 100 10 100 100 10 10 100 100 100 10 1000 1000 1000 10

随机性的质量不是最好的(从中读取字节/dev/urandom),但是对于脚本来说,它应该已经足够好了。

注1:当人们在评论中所观察到的,而不是单独一个可以初始化数组元素的过程中使用数组litteral,: x=(10 100 1000)

注2:可以用提取随机元素,而不是硬编码数组中的元素数${x[$RANDOM%${#x[@]}]}


5
+1尽管齐柏林飞艇在这种特殊情况下的回答很聪明,但阵列方法却更为通用。
卡米尔Maciorowski

4
好像是x=(10 100 1000)用bash中的文字创建数组,这样会更易读,也更惯用
cat

1
@cat:关于可读性的观点各不相同。我喜欢将单独的项目放在单独的行上,通常在结尾处添加注释来说明其价值。
AlexP '16

@AlexP哦,我想如果我认为它是故意的话,我不会发表评论。很公平,虽然

1
@AlexP之类的x[0]=10 # This sets the first value of x to ten. Ten is the number of fingers that humans have (excepting birth defects or mutilation). It is also the sum of 9 and 1, or product of 5 and 2. Ten is not prime. A traditional Christmas gift is ten lords a-leaping.东西?
尼克T

30

如果您使用的是bash(或zshksh93),则可以执行以下操作:

echo "$((10**($RANDOM%3+1)))"

要么

var=$((10**($RANDOM%3+1)))

分配给var


:)。当您看到它时很容易,但我没有。谢谢!!
Espen Larsen


8
case $(( RANDOM % 3 )) in
    0)
        var=10
        ;;
    1)
        var=100
        ;;
    2)
        var=1000
        ;;
esac

5

这是一种有点神秘的方式:

printf -v var '1%0*d' $(( RANDOM % 3 + 1 )) 0

这将$var根据需要分配随机值。该printf格式串是1%0Nd-这将导致0要被打印与N前导零,其中,N将在间隔的随机整数[1,3]

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.