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

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

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

样本:

var= 10 or 100 or 1000

答案1

使用数组来保存值并使用内置变量在其中进行选择$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:正如人们在评论中观察到的那样,当然可以使用 array litteral: x=(10 100 1000),而不是单独初始化数组元素。

笔记2:可以通过 提取随机元素,而不是对数组中的元素数量进行硬编码${x[$RANDOM%${#x[@]}]}

答案2

如果您正在使用巴什(或者桀骜或者克什93)你可以这样做:

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

或者

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

将其分配给变量

答案3

您还可以使用 GNU coreutilsshuf公用事业

a=$(shuf -n1 -e 10 100 1000)

RANDOM不过,按照其他答案使用几乎肯定会更快。

答案4

这是一个有点神秘的方法:

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

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

相关内容