test variable existence in hush
Hi,
can anyone confirm that this is a bug in the hush shell: both
test -n "$foo" && echo yes
and
test -z "$foo" && echo yes
result in nothing echoed if foo is not defined. If, on the other hand, foo is defined to a string containing blanks, both commands will echo yes.
Is there another way to check the existence of a variable?
Regards,
Andreas Engel
Quoted 4 lines · In message <20050822125758.00001da8@idefix> you wrote:
can anyone confirm that this is a bug in the hush shell: both
test -n "$foo" && echo yes
I cannot confirm this. The only part of hush which is involved here is the && processing which works fine for me..
"test" is NOT a hush builtin.
For example all I get is:
=> test -n "$foo" && echo yes Unknown command 'test' - try 'help'
Quoted 5 lines
result in nothing echoed if foo is not defined. If, on the other hand, foo is defined to a string containing blanks, both commands will echo yes.
Is there another way to check the existence of a variable?
Sure:
TRAB # foo=
TRAB # test -n "$foo" && echo yes
TRAB # test -n "$foo" || echo no
no
TRAB # test "$foo" && echo yes
TRAB # test "$foo" || echo no
no
TRAB # foo=dummy
TRAB # test -n "$foo" && echo yes
yes
TRAB # test -n "$foo" || echo no
TRAB # test "$foo" && echo yes
TRAB # test "$foo" || echo no
no
THe only problem I see is with "test -z":
TRAB # foo= TRAB # test -z "$foo" && echo yes TRAB # test -z "$foo" || echo no no but TRAB # test -z "" && echo yes yes TRAB # test -z "" || echo no TRAB #
Patches welcome.
Best regards,
Wolfgang Denk
Signature · 3 lines
Software Engineering: Embedded and Realtime Systems, Embedded Linux Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de Anything free is worth what you pay for it.
Quoted 4 lines · On Mon, 22 Aug 2005 14:21:58 +0200 Wolfgang Denk wrote:
I cannot confirm this. The only part of hush which is involved here is the && processing which works fine for me..
"test" is NOT a hush builtin.
I hit the send button too early...
Yes, "test" is not a hush builtin, but it is only available if the hush parser is enabled.
Quoted 19 lines
Sure:
TRAB # foo=
TRAB # test -n "$foo" && echo yes
TRAB # test -n "$foo" || echo no
no
TRAB # test "$foo" && echo yes
TRAB # test "$foo" || echo no
no
TRAB # foo=dummy
TRAB # test -n "$foo" && echo yes
yes
TRAB # test -n "$foo" || echo no
TRAB # test "$foo" && echo yes
TRAB # test "$foo" || echo no
noTHe only problem I see is with "test -z":
Quoted 9 lines
TRAB # foo= TRAB # test -z "$foo" && echo yes TRAB # test -z "$foo" || echo no no but TRAB # test -z "" && echo yes yes TRAB # test -z "" || echo no TRAB #
No, I think this is misleading. A quick debugging session showed that the problem is not the "test" command itself. With 'test -z ""' and 'test -n ""', the command will correctly see three arguments. However, with 'test -n "$foo"' and 'test -z "$foo"' (and empty $foo), the command will only get two arguments which always results in a return value of 1. That's why 'test -n' seems to work.
Regards,
Andreas Engel