Bash 中的随机变量

Bash 中的随机变量

您能帮我创建一个 (pat) 范围内的随机变量吗?我的意思是,一个命令将在值 p、a 或 t 内生成一个随机变量。

谢谢

答案1

您可以使用“变量” $RANDOM,它实际上是一个内部 Bash 函数(而不是常量),它返回一个伪随机0..32767 范围内的整数。要将此数字转换为 0..2 范围内的整数,可以将其乘以 3,然后(整数)除以 32768(=32767+1)。

# Set a string that will contain your characters:
str='pat'

# Calculate the number of characters in the string:
strlen=${#str}

# Get a random integer in the range 0..2 (0..strlen-1):
let r=RANDOM*strlen/32768

# Get one random character from the strlen-character string (str):
echo ${str:r:1}

或者您可以使用舒夫命令如下:

shuf -e -n1 'p' 'a' 't'

答案2

Bash 有一个特殊$RANDOM变量,可以打印随机数值。你可以计算$RANDOM 模数 3获取 0 到 2 之间的一个值,这意味着您可以将目标值保存在数组中,然后选择一个随机元素:

#!/bin/bash

## these are your p, a and t
values=(10 5 876)

## get a random value between 0 and 2
index=$((RANDOM % 3))

## print the corresponding element
echo ${values[$index]}

我循环运行了这个 1000 次,正如你在下面看到的,我得到了三个值中的每一个,大约有三分之一的时间,正如预期的那样:

$ for i in {1..1000}; do foo.sh ; done | sort | uniq -c
    364 10
    306 5
    330 876

这意味着该脚本打印了10364 次、5306 次和876330 次。

相关内容