bug-bash
[Top][All Lists]
Advanced

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

[PATCH] efficient [[ -v 1 ]] [was: Should [[ -v 1 ]] be supported?]


From: Martijn Dekker
Subject: [PATCH] efficient [[ -v 1 ]] [was: Should [[ -v 1 ]] be supported?]
Date: Sat, 18 Jan 2020 20:48:26 +0100
User-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:68.0) Gecko/20100101 Thunderbird/68.4.1

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

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