我有一个例子,我试图在一组字母中随机生成一个字母(即 var="abcdefghijklmnopqrstuvwxyz")。
我会怎样:
var="abcdefghijklmnopqrstuvwxyz"
echo "${var}"
产量: some_letter
重点是,我试图从我选择的选项中自动生成一个随机字母。无论是数组还是字符串都没有关系。
最佳答案
var="abcdefghijklmnopqrstuvwxyz"
echo "${var:$(( RANDOM % ${#var} )):1}" # pick a 1 char substring starting at a random position
之所以可行,是因为:
${var:START:LEN}
是一个 parameter expansion扩展为$var
的替代
${#var}
是参数扩展,扩展为字符串变量var内容的长度$(( ))
创建算术上下文,在该上下文中假定非数字字符串引用变量名称(因此可以使用RANDOM
而不是$RANDOM
).$RANDOM
,每次计算时,扩展为 0 到 32767 之间的随机整数。$RANDOM % ${#var}
取该随机整数除以名为var
的字符串中的字符数的余数;因此,它将介于 0 和 (length-of-var
- 1) 之间,并且几乎随机划分(如果 length-of-var
不平均分成 32768,则某些字符被选中的机会会比其他字符略高)。
因此,${var:$(( RANDOM % ${#var} )) : 1}
将在每次求值时选择字符串内的一个位置,并扩展为其中包含单个字符范围。
关于bash - 我如何使用 Bash 从字符串/数组中选择一个随机字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48837407/