[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
- [PATCH] efficient [[ -v 1 ]] [was: Should [[ -v 1 ]] be supported?],
Martijn Dekker <=