Zsh Mailing List Archive
Messages sorted by:
Re: expansion in conditional expression patterns
- X-seq: zsh-users 14490
- From: Sebastian Stark <seb-zsh@xxxxxxxxxxx>
- To: Peter Stephenson <pws@xxxxxxx>
- Subject: Re: expansion in conditional expression patterns
- Date: Tue, 13 Oct 2009 13:42:00 +0200
- Cc: zsh-users ml <zsh-users@xxxxxxxxxx>
- In-reply-to: <20091013100710.27e3c2fb@news01>
- Mailing-list: contact zsh-users-help@xxxxxxxxxx; run by ezmlm
- References: <F851A022-A342-41EE-9BC8-692B7E7D3025@xxxxxxxxxxx> <20091013100710.27e3c2fb@news01>
On 13.10.2009, at 11:07, Peter Stephenson wrote:
On Mon, 12 Oct 2009 19:51:14 +0200
Sebastian Stark <seb-zsh@xxxxxxxxxxx> wrote:
% if [[ 1 != <2-$limit> ]]; then print outside; fi
zsh: parse error: condition expected: 1
What part of this do I misunderstand?
Logically this ought to work: parameter substitution is performed
pattern matching or globbing. However, "<" is rather overloaded and
the expression is parsed the shell only decides it's a numeric glob
expression is in the strict form with digits. It could probably be
smarter in this case, where "<" can't be a redirection, but as a
effect pattern matching would have to be made smarter about deciding
on if the expression was a numeric glob, so it's not entirely trivial.
Thanks for clarifying this.
Your best bet for now is to do numeric comparisons with -ge and -le
<= and >= in (( ... )) expressions. You can use an "eval" but
a bit too ugly for what you're trying to do.
I just did this:
if [[ ! ( ($cmdnum -ge 1) && ($cmdnum -le $limit) ) ]]
Maybe I should have asked differently because there might be a better
solution for what I'm trying to do. I have an array of commands,
$cmds, and a user supplied $cmdnum. Now I want to check wether the
user entered a valid number. ($limit would be $#cmds in this example).
Is there a better way to check wether the user entered a) a number and
b) in the range 1..$#cmds?
Messages sorted by: