[Discuss] through the looking glass

Steve Litt slitt at troubleshooters.com
Sun Jun 3 19:56:42 EDT 2018


On Sat, 2 Jun 2018 12:42:00 -0400
dan moylan <jdm at moylan.us> wrote:

> richard pieri writes:
> On 6/1/2018 7:32 PM, dan moylan wrote:
> >> also b2 writes out empty files abc and xyz.
> >>
> >> i've surely missed something fundamental, or did i just
> >> step into an alternate universe?  
> 
> > What you missed isn't so obvious.  
> 
> > "[" is a synonym for /bin/test with the caveat that a closing "]" is
> > required. What's happening is that "[ $st1 > $st2 ]" becomes:  
> 
> >   /bin/test abc > xyz  
> 
> > "/bin/test abc" returns true, and you get an empty file because test
> > generates no output, only return codes 0 (true) or 1 (false).  
> 
> > The portable fix is to rewrite your logic because the test command
> > only allows for "=" and "!=" in string comparisons.  
> 
> > The bash-specific fix is to change your single brackets to double
> > brackets: "[[ $st1 > $st2 ]]". "[[" is a bash built-in and it
> > bypasses all of the above problems. But it's not portable.  
> 
> thanks for your lucid explanation.

And just for a laugh, check out the following. It returns "<" or ">"
as expected (but it's undefined if they're equal), and nowhere does it
use any kind of "greater than" or "less than" logic:

if test "`echo "$1""\n""$2" | sort | head -n1`" = "$1"; then echo "<";else echo ">"; fi 

LOL

SteveT

Steve Litt 
June 2018 featured book: Twenty Eight Tales of Troubleshooting
http://www.troubleshooters.com/28





More information about the Discuss mailing list