bug-bash
[Top][All Lists]
Advanced

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

Re: nameref in temp environment


From: Piotr Grzybowski
Subject: Re: nameref in temp environment
Date: Fri, 13 May 2016 16:39:10 +0200

hi,

 there are two issues here, small regressions.
 I think in tmpenv we should create the variable unconditionally (concerning 
the namerefs), and should not follow the namerefs on checking if the variable 
exists:

diff --git a/variables.c b/variables.c
index 1877b17..f149b66 100644
--- a/variables.c
+++ b/variables.c
@@ -3076,7 +3076,7 @@ assign_in_env (word, flags)
          aflags |= ASS_APPEND;
        }
 
-      var = find_variable (name);
+      var = find_variable_noref(name);
       if (var == 0)
        var = find_variable_last_nameref (name, 1);
          
@@ -3088,14 +3088,6 @@ assign_in_env (word, flags)
          return (0);
        }
       temp = name + offset + 1;
-      if (var && nameref_p (var) && valid_nameref_value (temp, 0) == 0)
-       {
-         /* If we're assigning a value to a nameref variable in the temp
-            environment that's an invalid name, flag an error. */
-         sh_invalidid (temp);
-         free (name);
-         return (0);
-       }
 
       value = expand_assignment_string_to_string (temp, 0);
 

cheers,
pg


On 13 May 2016, at 02:58, Grisha Levit wrote:

> The 20160506 snapshot changes assign_in_env to do some nameref-related checks 
> on the variable name, but these don’t really seem to make sense since 
> assignments in the temporary env just create regular variables and don’t 
> follow the nameref chain otherwise.
> 
> i.e. bash doesn’t actually care that ref is a nameref at the outer scope for 
> the purposes of creating the temp env:
> 
> $ unset var; declare -n ref=var
> $ ref=xxx declare -p ref var       # the chain is not followed for assignment 
> (makes sense)
> declare -x ref="xxx"
> bash: declare: var: not found
> 
> $ var= ref=5 declare -p ref
> declare -x ref="5"
> 
> $ ref=5 declare -p ref
> bash: `5': not a valid identifier   # this shouldn't matter?
> declare -n ref="var"
> 
> Same thing for the check to see if ref points to a readonly variable.
> 




reply via email to

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