1. ホーム
  2. bash

コマンドラインから32桁の16進数のランダムな文字列を取得する方法は?

2023-09-30 14:01:25

質問

16進数32桁の文字列を出力するコマンドを組みたいと思います。動作するPythonスクリプトは持っています。

python -c 'import random ; print "".join(map(lambda t: format(t, "02X"), [random.randrange(256) for x in range(16)]))'

のような出力が生成されます。

6EF6B30F9E557F948C402C89002C7C8A 

これは私が必要とするものです。

Macでは、こんなこともできるんです。

uuidgen | tr -d '-'

しかし、私はより洗練されたスクリプト言語であるrubyやpythonにアクセスできませんし、Macにも乗らないので(だからuuidgenもない)。私は限られたプラットフォーム上にいるので、sed, awk, /dev/random のような bash'ish のツールにこだわる必要があります。これを行う方法はありますか?

どのように解決するのですか?

もし、あなたが hexdump であれば

hexdump -n 16 -e '4/4 "%08X" 1 "\n"' /dev/urandom

は仕事をするはずです。

説明します。

  • -n 16 で16バイトの入力を消費します(16進数32桁=16バイト)。
  • 4/4 "%08X" は4回繰り返し、繰り返しごとに4バイトを消費し、対応する32ビットの値を8つの16進数として、必要であれば先頭のゼロを付けて表示します。
  • 1 "\n" を使用して、単一の改行で終了します。