Op 29-12-18 om 01:19 schreef Chet Ramey:
On 12/27/18 3:11 PM, Martijn Dekker wrote:

Consistency might be a better argument. If [[ -v foo ]] is equivalent to [[
-n ${foo+s} ]] for variables (with the advantage that you don't need 'eval'
to handle arbitrary values of 'foo'), then perhaps it's not unreasonable to
expect [[ -v 1 ]] to be equivalent to [[ -n ${1+s} ]].

The completeness argument is more rigorous, and there's a case to add this
in a future version of bash. He didn't make that argument, though.

I noticed some deactivated code tagged bash-5.1 with my name on it. Cool. :)

Isn't the way below much more efficient, though? There's no need to retrieve and discard the value of a positional parameter -- we can just compare the number to $#, i.e. number_of_args(). Any number between 0 and $#, inclusive, represents a set positional parameter by definition.

- M.

diff --git a/test.c b/test.c
index 9cbc0436..27efd9f7 100644
--- a/test.c
+++ b/test.c
@@ -640,12 +640,7 @@ unary_test (op, arg)
 #if 0  /* TAG:bash-5.1 from Martijn Dekker */
       else if (legal_number (arg, &r))             /* -v n == is $n set? */
        {
-         char *t;
-         int ret;
-         t = get_dollar_var_value (r);
-         ret = t ? TRUE : FALSE;
-         free (t);
-         return ret;
+         return (r >= 0 && r <= number_of_args());
        }
 #endif
       v = find_variable (arg);


--
modernish -- harness the shell
https://github.com/modernish/modernish

Reply via email to