On Mon, Oct 14, 2024 at 2:57 AM Chet Ramey <chet.ra...@case.edu> wrote:
>
> I'll consider it, but I'm not eager to carve out more exceptions for
> `set -u'.

Checking for unbound_vars_is_error can be done earliest if you worry
about additional runtime weight.  It makes the code for disabled `set
-u` instances optimal by default even just by theory.  That way the
number of added exceptions would only matter to people who care about
using `set -u`.


--
konsolebox
diff --git a/subst.c b/subst.c
index 251eafaf..5e906c10 100644
--- a/subst.c
+++ b/subst.c
@@ -10142,9 +10142,9 @@ parameter_brace_expand (char *string, size_t *indexp, 
int quoted, int pflags, in
 
   /* All the cases where an expansion can possibly generate an unbound
      variable error. */
-  if (want_substring || want_patsub || want_casemod || c == '@' || c == '#' || 
c == '%' || c == RBRACE)
-    {
-      if (var_is_set == 0 && unbound_vars_is_error && ((name[0] != '@' && 
name[0] != '*') || name[1]) && all_element_arrayref == 0)
+  if (unbound_vars_is_error)
+    if (want_substring || want_patsub || want_casemod || c == '@' && 
!want_attributes || c == '#' || c == '%' || c == RBRACE)
+      if (var_is_set == 0 && ((name[0] != '@' && name[0] != '*') || name[1]) 
&& all_element_arrayref == 0)
        {
          set_exit_status (EXECUTION_FAILURE);
          err_unboundvar (name);
@@ -10153,7 +10153,6 @@ parameter_brace_expand (char *string, size_t *indexp, 
int quoted, int pflags, in
          free (name);
          return (interactive_shell ? &expand_wdesc_error : 
&expand_wdesc_fatal);
        }
-    }
     
   /* If this is a substring spec, process it and add the result. */
   if (want_substring)

Reply via email to