Skip to contentSkip to conversation

test variable existence in hush

U-Boot-Users Andreas Engel 2 participants 3 messages Aug 22, 2005

lore
Share & tools
lore
#0 lore raw

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

#1 lore raw
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.
#2 lore raw
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
no

THe 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