bug-bash
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [bash 4] 'test -v 1' is never true


From: Greg Wooledge
Subject: Re: [bash 4] 'test -v 1' is never true
Date: Fri, 25 Nov 2022 16:53:11 -0500

On Fri, Nov 25, 2022 at 03:40:42PM -0600, G. Branden Robinson wrote:
> I don't think it is a bug.  It is unspecified behavior according to
> POSIX.
> 
> "-v" is not an operator according to POSIX, and I don't recall seeing it
> in any shell.  It is therefore interpreted as a string argument.

[...]

It's a bash extension, not part of POSIX.  From 'help test':

      -v VAR         True if the shell variable VAR is set.

Or from the man page:

       -v varname
              True if the shell variable varname is set (has been  assigned  a
              value).

So the question is whether "1" qualifies as a "shell variable".  I would
argue that it doesn't -- it's a special parameter, not a variable (because
you can't assign to it).

So, there's no reason to expect that "test -v 1" would work.  If you want
to test whether there's at least one argument, you should use something
like:

(($# > 0))     # bash extension

or

test "$#" -gt 0



reply via email to

[Prev in Thread] Current Thread [Next in Thread]