您能帮我创建一个 (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
这意味着该脚本打印了10
364 次、5
306 次和876
330 次。