On Wed, Aug 23, 2017 at 03:23:50PM -0400, Greg Wooledge wrote:
> On Wed, Aug 23, 2017 at 01:16:56PM -0600, Aaron Toponce wrote:
> > Three POSIX-compliant shell functions that rely on no extra utilities
> >     shuff () {
> >         if [ $(command -v shuf) ]
> 
> Needs quotes.

Good catch.

> >             shuffle -f /dev/stdin -p "$1"
> 
> /dev/stdin is not POSIX-compliant.

Interesting. I was not aware of that.

> >         else
> >             awk 'BEGIN{
> >                 "od -tu4 -N4 -A n /dev/urandom" | getline
> 
> /dev/urandom is not POSIX-compliant.  Then again, I don't believe there
> is *any* POSIX-compliant source of randomness available to shell scripts
> other than awk's srand and rand.
> 
> Emulating /dev/urandom in awk is left as an exercise. ;-)
> 
> >         [ $(uname) = "SunOS" ] && FILE="/usr/dict/words" || 
> > FILE="/usr/share/dict/words" 
> 
> It'd be better to list all the possible places the dict file may exist,
> and iterate through them until you find it, regardless of uname.

Agreed. I tested this on the BSDs, GNU/Linux, and Solaris/OmniOS/SmartOS. I
don't have access to HP-UX, IBM AIX, True64, and some of the other Unices. Is
Plan9 still a thing?

> Also, don't use all-caps shell variable names.  All-caps names are
> reserved for special internal variables, and environment variables.

I've gone back and forth on this. I'd be interested to see a standard
specification on this, if such exists. It seems convention that uppercase is
used more frequently for shell variables than lowercase. I've tended to lean on
uppercase more frequently as a result. Just so long as it doesn't clash with
existing variables, I don't see the reason not to.

-- 
. o .   o . o   . . o   o . .   . o .
. . o   . o o   o . o   . o o   . . o
o o o   . o .   . o o   o o .   o o o

Attachment: signature.asc
Description: PGP signature

Reply via email to