我正在尝试打印一个随机n
字母词,我n
从命令行本身输入,但由于某种原因,我的脚本每次使用相同的值时都会给我相同的答案n
。
#!/bin/bash
num=$1
egrep "^.{$num}$" /usr/share/dict/words | head -n $RANDOM| tail -n 1
我将我的脚本称为:
$ bash var3.sh 5
étude # always the same output when using 5
$ bash var3.sh 3
zoo # always the same output when using 3
我的脚本名称在哪里var3.sh
,5 是我要随机打印的单词的长度。
如何让它打印一个真正随机的单词?
它没有。但是 $RANDOM 返回大数字(介于 0 和 32767 之间),特别是对于长度有限的单词,显示相同的结果,因为该
head
部分可能返回 grep 的所有结果(对于 3,在 my 中只有 819 个匹配项/usr/share/dict/words
)。更好的解决方案可能是改组结果:
egrep "^.{$num}$" /usr/share/dict/words | sort -R | tail -n 1
where
-R
表示--random-sort
(GNUsort
扩展)。打印任意num字母单词的简单方法使用
shuf
:该
shuf
命令输出输入的随机排列,并且-n1
标志告诉它仅输出此结果中的第一项。正如其他人所指出的那样,您的代码的主要问题是,
$RANDOM
通常会是一个比特定长度的单词数大得多的值。仅使用
awk
:程序从给定文件中读取所有具有一定长度的行。这些存储在数组中
words
。最后,从这个数组中选择一个随机元素并打印出来。