[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