パラメータ展開を使用します。 ${#chars}
可能な文字数、%
モジュロ演算子です。 ${chars:offset:length}
offset
の位置にある文字を選択します 、つまり、この場合は 0 - length($chars) です。
chars=abcd1234ABCD
for i in {1..8} ; do
echo -n "${chars:RANDOM%${#chars}:1}"
done
echo
32 バイトの (たとえば) 16 進文字列を生成する別の方法:
xxd -l 32 -c 32 -p < /dev/random
-u
を追加 代わりに大文字が必要な場合。
bash でランダムな英数字の文字列を探している場合:
LC_ALL=C tr -dc A-Za-z0-9 </dev/urandom | head -c 64
十分に文書化された関数と同じ:
function rand-str {
# Return random alpha-numeric string of given LENGTH
#
# Usage: VALUE=$(rand-str $LENGTH)
# or: VALUE=$(rand-str)
local DEFAULT_LENGTH=64
local LENGTH=${1:-$DEFAULT_LENGTH}
LC_ALL=C tr -dc A-Za-z0-9 </dev/urandom | head -c $LENGTH
# LC_ALL=C: required for Mac OS X - https://unix.stackexchange.com/a/363194/403075
# -dc: delete complementary set == delete all except given set
}