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