zsh-workers
 help / color / mirror / code / Atom feed
From: Bart Schaefer <schaefer@brasslantern.com>
To: Zsh hackers list <zsh-workers@zsh.org>
Cc: Martijn Dekker <martijn@inlv.org>
Subject: Re: exported unset variables [was: 'export -p' lacks POSIX output]
Date: Fri, 28 Oct 2016 17:18:59 -0700	[thread overview]
Message-ID: <161028171859.ZM2366@torch.brasslantern.com> (raw)
In-Reply-To: <bec1e0c3-ad4a-6513-726e-049723d18c24@inlv.org>

[It's once again taking a long time for some messages to reach the
mailing list.  My first message on this thread hasn't even shown up
there yet.]

On Oct 28, 10:48pm, Martijn Dekker wrote:
}
} $ PS1='%% ' Src/zsh -f -o posixbuiltins
} % unset -v var
} % export var
} % echo ${var+s}  # this shows it as set (should be unset)
} s
} % export -p var  # but this shows it as unset
} export var

Ah, I see.  Yes, I mentioned this in the email about the patch.  The
shell variable named "var" becomes set upon being exported, but the
environment copy remains unset until explicitly assigned.  Zsh has
always distinguished the shell variable from the exported variable,
even though the value of the exported variable (if any) is stored in
the data structure for the shell variable.

All my patch did was cause "export -p" to output the state of the
environment variable instead of the state of the shell variable.

See if the patch below will help.

} (Also, is it correct/expected behaviour that zsh doesn't parse comments
} on the interactive command line? Blindly copying/pasting the above won't
} work for that reason.)

Yes, the option INTERACTIVE_COMMENTS has to be set to recognize comments
at the command line.  Should this be on in POSIX mode?


diff --git a/Src/builtin.c b/Src/builtin.c
index 2db739f..183ed45 100644
--- a/Src/builtin.c
+++ b/Src/builtin.c
@@ -2008,11 +2008,12 @@ typeset_single(char *cname, char *pname, Param pm, UNUSED(int func),
      * handled in createparam().  Here we just avoid using it for the
      * present tests if it's unset.
      *
-     * POSIXBUILTINS horror: we need to retain the 'readonly' flag
-     * of an unset parameter.
+     * POSIXBUILTINS horror: we need to retain the 'readonly' or 'export'
+     * flags of an unset parameter.
      */
     usepm = pm && (!(pm->node.flags & PM_UNSET) ||
-		   (isset(POSIXBUILTINS) && (pm->node.flags & PM_READONLY)));
+		   (isset(POSIXBUILTINS) &&
+		    (pm->node.flags & (PM_READONLY|PM_EXPORTED))));
 
     /*
      * We need to compare types with an existing pm if special,
@@ -2135,7 +2136,8 @@ typeset_single(char *cname, char *pname, Param pm, UNUSED(int func),
 	/*
 	 * Stricter rules about retaining readonly attribute in this case.
 	 */
-	if ((on & PM_READONLY) && (!usepm || (pm->node.flags & PM_UNSET)) &&
+	if ((on & (PM_READONLY|PM_EXPORTED)) &&
+	    (!usepm || (pm->node.flags & PM_UNSET)) &&
 	    !ASG_VALUEP(asg))
 	    on |= PM_UNSET;
 	else if (usepm && (pm->node.flags & PM_READONLY) &&


  reply	other threads:[~2016-10-29  1:58 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-10-22  3:02 'export -p' lacks POSIX output Martijn Dekker
2016-10-22 18:24 ` Bart Schaefer
2016-10-23 12:00   ` Martijn Dekker
2016-10-23 16:47     ` Bart Schaefer
2016-10-24  8:33   ` Peter Stephenson
2016-10-28 21:00 ` exported unset variables [was: 'export -p' lacks POSIX output] Martijn Dekker
2016-10-28 21:31   ` Bart Schaefer
2016-10-28 21:48     ` Martijn Dekker
2016-10-29  0:18       ` Bart Schaefer [this message]
2016-10-29  8:11         ` Martijn Dekker
2016-10-29 18:09           ` Bart Schaefer
2016-10-29 18:43             ` Peter Stephenson
2016-10-29 19:05           ` Bart Schaefer
2016-10-29 20:20             ` interactive comments [was: exported unset variables] Martijn Dekker
2016-10-30  1:25               ` Bart Schaefer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=161028171859.ZM2366@torch.brasslantern.com \
    --to=schaefer@brasslantern.com \
    --cc=martijn@inlv.org \
    --cc=zsh-workers@zsh.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).