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