Python - Bash - 随机数

3 投票
3 回答
1495 浏览
提问于 2025-04-17 14:13

假设有一个脚本叫做'random.sh',里面的内容是:

#!/bin/bash

RANDOM=`python -v -d -S -c "import random; print random.randrange(500, 800)"`
echo $RANDOM

运行这个脚本会生成一些随机数,这些随机数不在你指定的范围内:

[root@localhost nms]# ./random.sh
23031
[root@localhost nms]# ./random.sh
9276
[root@localhost nms]# ./random.sh
10996

如果把RANDOM这个变量改名为RAND,就能生成在你指定范围内的随机数,也就是说:

#!/bin/bash

RAND=`python -v -d -S -c "import random; print random.randrange(500, 800)"`
echo $RAND

结果是:

[root@localhost nms]# ./random.sh
671
[root@localhost nms]# ./random.sh
683
[root@localhost nms]# ./random.sh
537

我想问的是——这是为什么呢? :)

3 个回答

1

$RANDOM 是 bash 中一个预定义的变量。

打开一个新的终端,试试看:

> echo $RANDOM
6007
> echo $RANDOM
122211
2

$RANDOM 是一个内部的 bash 函数,它会返回一个范围在 0 到 32767 之间的伪随机整数。

所以在第一个例子中,你看到的随机数字是由 bash 生成的,而不是你的 Python 脚本生成的。当你给 RANDOM 赋值时,其实是在给 bash 的随机数生成器提供一个初始值。

6

RANDOM是一个预定义的bash变量。根据手册的说明:

RANDOM Each time this parameter is referenced, a random integer between
       0 and 32767 is generated.  The sequence of random numbers may be
       initialized by assigning a value to RANDOM.  If RANDOM is unset,
       it loses its special properties,  even  if  it  is  subsequently
       reset.

所以如果你真的想使用RANDOM这个变量名,可以这样做:

unset RANDOM
RANDOM=`..your script..`

撰写回答