テスト用に64ビットの符号付き整数を生成する必要があります。
これどうやってするの?
#!/bin/sh
long=$(????)
/dev/urandom
からキャプチャされた2つの32ビット整数を結合します。 od
を使用して ステファンの答え ごとに単一の64ビット値をキャプチャすることは可能ですが、OS Xの少なくとも一部のバージョンでは、適切なエラーメッセージなしで失敗します。
#!/bin/sh
low32=$(od -An -td4 -N4 < /dev/urandom)
high32=$(od -An -td4 -N4 < /dev/urandom)
long=$(($low32 + ($high32 << 32) ))
macOSにはPythonが付属しています。 random
モジュールを使用します。
python -c 'import random; rng = random.SystemRandom(); print rng.randint(-2**63, 2**63-1)
MacOSには_/dev/urandom
_があるので、次のことができるはずです。
_od -An -vtd8 -N8 < /dev/urandom
_
ただし、実際のmacOSシステムで試してみた人によると(コメントを参照)、そこでは機能しません。 macOSは認定されたUnixシステムであることが意図されているため、それはバグであることを意味します POSIXはそのコマンドの動作を明確に指定します 。 POSIXが指定しない(実装が定義する)唯一のことは、バイト順序です(これはすべてランダムなバイトであるため、ここでは気にしません)。
または、ここでksh
/bash
/zsh
の_$RANDOM
_を使用することもできます。 macOSのsh
は最近bash
に基づいていますが、bash/zsh(またはksh
以外のmksh
実装に切り替えたほうがよいでしょう。 _$RANDOM
_はsh
機能ではないため、32ビットを使用してください。別のシェルに切り替えることにした場合、macOSの将来のバージョンでは機能しない可能性があります。
_m=32768 # $RANDOM span
long=$((RANDOM+RANDOM*m+RANDOM*m*m+RANDOM*m*m*m+RANDOM*m*m*m*m))
_
または:
_long=$((RANDOM|(RANDOM<<15)|(RANDOM<<30)|(RANDOM<<45)|(RANDOM<<60)))
_
これは5 * 15 == 75ビットですが、シェルによって64ビットに切り捨てられます。
POSIXツールチェストでは、乱数を生成する方法はawk
のRand()
を使用するため、次のことができます。
_awk 'BEGIN{srand(); printf "%.20g\n", Rand() * (2^64) - (2^63)}'
_
多くのawk
実装(srand()
の結果に基づいてtime(3)
シードを実行する実装)では、2回実行すると同じ出力が得られることに注意してください。同じ秒で。
また、浮動小数点数の表現方法のため、64ビット数(2など)があると思います。63-1)出力されないこと。