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

2020-01-18 Thread Martijn Dekker

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



Re: Tiny documentation typo

2020-01-18 Thread Chet Ramey
On 1/17/20 5:47 PM, Andy Goth wrote:
> I spotted a tiny typo in the documentation for bash-5.0.11, figured I'd
> submit a patch while I was thinking about it.  I mean, that's how stuff
> gets fixed, right?  Here goes:
> 
> --- ../bash-5.0/doc/bash.1    2019-01-02 08:14:30.0 -0600
> +++ ./doc/bash.1    2020-01-17 16:42:11.739809420 -0600
> @@ -4498,7 +4498,7 @@
>  Conditional expressions are used by the \fB[[\fP compound command and
>  the \fBtest\fP and \fB[\fP builtin commands to test file attributes
>  and perform string and arithmetic comparisons.
> -The \fBtest\fP abd \fB[\fP commands determine their behavior based on
> +The \fBtest\fP and \fB[\fP commands determine their behavior based on
>  the number of arguments; see the descriptions of those commands for any
>  other command-specific actions.

Thanks for the report.

Chet

-- 
``The lyf so short, the craft so long to lerne.'' - Chaucer
 ``Ars longa, vita brevis'' - Hippocrates
Chet Ramey, UTech, CWRUc...@case.eduhttp://tiswww.cwru.edu/~chet/



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

2020-01-18 Thread Chet Ramey
On 1/18/20 2:48 PM, Martijn Dekker wrote:
> 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.

Thanks; that's clever.

Chet

-- 
``The lyf so short, the craft so long to lerne.'' - Chaucer
 ``Ars longa, vita brevis'' - Hippocrates
Chet Ramey, UTech, CWRUc...@case.eduhttp://tiswww.cwru.edu/~chet/