【发布时间】:2017-09-02 15:26:55
【问题描述】:
拥有:
mapfile -t words < <( head -10000 /usr/share/dict/words)
echo "${#words[@]}" #10000
r=$(( $RANDOM % ${#words[@]} ))
echo "$r ${words[$r]}"
这会从 10k 个单词的数组中随机选择一个单词。
但是如果数组大于 32767(例如,整个文件 200k+ 字),它会停止工作,因为 $RANDOM 最多只能达到 32767。来自 man bash:
每次引用此参数时,都会生成一个介于 0 和 32767 之间的随机整数。
mapfile -t words < /usr/share/dict/words
echo "${#words[@]}" # 235886
r=$(( $RANDOM % ${#words[@]} )) #how to change this?
echo "$r ${words[$r]}"
不想使用像perl -plE 's/.*/int(rand()*$_)/e' 这样的perl,不是每个系统都安装了perl。寻找最简单的解决方案——也不关心真正的随机性——它不适用于密码学。 :)
【问题讨论】: