Re: "if [ s1 > s2 ]" broken, writing a s2 file

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 12/08/2014 10:32 AM, solsTiCe d'Hiver wrote:
> hello,
> folowing that bug
> https://bugs.launchpad.net/ubuntu/+source/update-notifier/+bug/1400357,
> I follow through to investigate and I found out
> that whatever I try, when comparing 2 strings I always end up with a
> file written to disk
> 
>>From the man page
> test expression
>      [ expression ]
> [...]
> s1 > s2       True if string s1 comes after s2 based on the ASCII
> value of their characters.

You HAVE to escape the > so that it is interpreted as an argument and
not a redirection operator.  The bug is not in dash, but in your usage.

> 
> when I try to use it:
> a="ert"
> b="aze"
> if [ $a > $b ] ; then

Wrong.  Use:

if [ "$a" ">" "$b" ]; then


> 
> so this "if syntax" is broken or I don't knwo how to use it.

The latter.

> 
> Also it is really dangerous  to use a syntax similar to file
> redirection and this is exactly what is happening here.

POSIX is proposing the addition of the shell builtin [[ ]], where
because it is a syntactical part of the shell, it would have safe
semantics (that is, [[ $a > $b ]] would be perfectly safe and do the
right thing). But until the POSIX standardization is complete, dash does
not implement [[; and as long as only '[' is portable (with its
unfortunate but historically-mandated semantics of operating as if it
were NOT a builtin, in that shell parsing happens before test sees its
arguments), then you have to quote anything that might otherwise be
misinterpreted during parsing.

-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org

Attachment: signature.asc
Description: OpenPGP digital signature


[Index of Archives]     [LARTC]     [Bugtraq]     [Yosemite Forum]     [Photo]

  Powered by Linux