Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > gnu.bash.bug > #15815

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

From Martijn Dekker <martijn@inlv.org>
Newsgroups gnu.bash.bug
Subject [PATCH] efficient [[ -v 1 ]] [was: Should [[ -v 1 ]] be supported?]
Date 2020-01-18 20:48 +0100
Message-ID <mailman.2924.1579376918.1979.bug-bash@gnu.org> (permalink)
References <CABrM6wmrn2gi8_HgmRg67B5nsgGNFRn8Bn-r20MvC-_2LJHZ0g@mail.gmail.com> <5dac2cf2-2fac-0fd1-058f-6a84a3271738@case.edu> <abd86dbc-f6e2-62bd-e9dc-f959e2dbff9f@inlv.org> <f19a07b9-e3a8-96f4-4fd9-98358dd2ccc2@case.edu> <858f35a5-50d1-0393-833b-7625f50979ac@inlv.org>

Show all headers | View raw


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

Back to gnu.bash.bug | Previous | Next | Find similar | Unroll thread


Thread

[PATCH] efficient [[ -v 1 ]] [was: Should [[ -v 1 ]] be supported?] Martijn Dekker <martijn@inlv.org> - 2020-01-18 20:48 +0100

csiph-web