Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: equivalent of "if (( $+commands[FOO] ))" for functions?



On Mon, Aug 6, 2012 at 6:38 PM, Benjamin R. Haskell <zsh@xxxxxxxxxx> wrote:
> In case you've only seen the idiom you're using, and didn't have an
> explanation:
>
> $+param expands to 0 if param is unset, and 1 if it's set.  The double
> parentheses: (( ... ))  just make the conditional "mathy" (so that non-zero
> is true).  So, you can use this with your own associative arrays, too:
>
> typeset -A some_array
> some_array+=( foo some-foo-thing )
> if (( $+some_array[foo] ))
> then
>     echo yay
> fi

Ah, that's helpful, thanks. Indeed I have just been copy/pasting this
without really knowing how it worked.

Hrm… so… I often do something like this to do different things based
on the exit status of a given command 'foo'

For example:

	foo

	EXIT="$?"

	if [ "$EXIT" = "0" ]
	then
		# do whatever

	else
		echo "$0: failed (\$EXIT = $EXIT)"

		exit 1
	fi

Is there a way to do something like that with $+param?

I tried this:

	EXIT+=( test -d ~/etc )

	if (( $+EXIT[test] ))
	then
		echo yes
	else
		echo no
	fi

thinking that it would say 'yes' if 'test -d' exited with status = 0
or 'no' with any other status, but that didn't seem to work (I always
seem to get no even if 'test -d' should return 0.

So I assume that I'm misunderstanding something, possibly trying to
make apple pie uses oranges and wondering why it doesn't taste right.


TjL



Messages sorted by: Reverse Date, Date, Thread, Author