Denys Vlasenko wrote: > Paul, hi. :) > > On Monday 21 July 2008 20:35, Chris Larson wrote: > >> [EMAIL PROTECTED] busybox% ./busybox test -f = >> [EMAIL PROTECTED] busybox% ./busybox test \( -f = \) >> test: closing paren expected >> >> Hehe. I highly doubt anyone would actually name a file =, but what the >> heck, figured you'd >> want to know about any cases that confuse the parser. It's interesting to >> note that -f = >> works, but ( -f = ) does not. No customer issue on this of course, just >> made myself try >> lots of combinations during the testing. >> >> I found a case where the "unknown operand" error is seen. If it sees an >> operand after an >> expression, which is not -o or -a, it gives that error: >> [EMAIL PROTECTED] busybox% ./busybox test -f = -a >> [EMAIL PROTECTED] busybox% ./busybox test -f = -a -e foo >> test: -e: unknown operand >> >> Due to the precedence, that's seen as two expressions without a -a or -o to >> join them. >> The error message could be confusing in this case. -e is, of course, a valid >> operator, and -e foo is a valid expression, but -e is not valid -there-, only >> -a or -o are. >> > > > So, now, do you see why x"str" trick is actually not so silly? >
I now recall reading about this in the shell portability section of the autoconf manual. Excerpt: Posix also says that `test ! "string"', `test -n "string"' and `test -z "string"' work with any string, but many shells (such as Solaris, AIX 3.2, unicos 10.0.0.6, Digital Unix 4, etc.) get confused if string looks like an operator: $ test -n = test: argument expected $ test ! -n test: argument expected Similarly, Posix says that both `test "string1" = "string2"' and `test "string1" != "string2"' work for any pairs of strings, but in practice this is not true for troublesome strings that look like operators or parentheses, or that begin with `-'. It is best to protect such strings with a leading `X', e.g., `test "Xstring" != X' rather than `test -n "string"' or `test ! "string"'. -- Chris Larson Dedicated Engineer Montavista, Inc. Email: clarson AT mvista DOT com Email: clarson AT kergoth DOT com _______________________________________________ busybox mailing list busybox@busybox.net http://busybox.net/cgi-bin/mailman/listinfo/busybox