Having read all the criticism of the API, I still don't agree with the minimalist view nor do I favor implementing a mathfunc to mirror a semi-obscure API, and prefer to keep SRANDOM in a module that fails to load if no kernel random source is available  so I'm proposing a new API. builtin: zrandint -c /count/=*1 *-U /upper/=*MAX_UINT32 *-L /lower/=*0 *-s /scalar /-a /array /-f raw|hex|*dec* **default output is equivalent to _echo $SRANDOM_. I can special case the nonsensical arguments like /count/=0 and /upper/=/lower /if that's the wish of the group/. upper/ is inclusive zrandbyte -c /count/=*8 *-s /scalar /-a /array /-f raw|hex|*hex:*|dec:     default output format will be a colon-separated string of bytes encoded in hex, in an array hex and hex: are equivalent.  I could, instead, add another option to specify a separator and default to :. Parameter: SRANDOM     A random, uniformly-distributed, unsigned, 32-bit integer. mathfunc: zrandomf()     produces a random float-point number from 0 to 1  inclusive zrandomi(/upper/=*MAX_UINT32*,/lower/=*0*,/inclusive/=*0*)     takes 0 to 3 arguments.  exclusive by default to accommodate ${string[zrandomi($#string)+1]} I'm not particularly tied to any of the names except SRANDOM