私のスクリプトは$ RANDOMを使用すると同じ出力を生成します。

私のスクリプトは$ RANDOMを使用すると同じ出力を生成します。

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はランダムに印刷したい単語の長さです。

本当にランダムな単語を印刷するにはどうすればよいですか?

ベストアンサー1

しかし、実際にはそうではありません。ただし、$RANDOM は特に制限された長さの単語に対して大きな数字 (0 ~ 32767) を返し、その部分が grep のすべての結果を返すことができるのと同じ結果を表示しますhead(3 の場合 my に 819 の一致のみあり/usr/share/dict/words)。

より良い解決策は結果を混ぜることです。

egrep "^.{$num}$" /usr/share/dict/words | sort -R | tail -n 1

これは(GNU拡張)を-R意味します。--random-sortsort

おすすめ記事