A NOTE has been added to this issue. ====================================================================== http://austingroupbugs.net/view.php?id=767 ====================================================================== Reported By: dwheeler Assigned To: ajosey ====================================================================== Project: 1003.1(2008)/Issue 7 Issue ID: 767 Category: Shell and Utilities Type: Enhancement Request Severity: Objection Priority: normal Status: Under Review Name: David A. Wheeler Organization: User Reference: Section: XCU 2.14 (local) Page Number: 2374 Line Number: 75650 Interp Status: --- Final Accepted Text: ====================================================================== Date Submitted: 2013-10-11 02:02 UTC Last Modified: 2017-05-24 13:26 UTC ====================================================================== Summary: Add built-in "local" ====================================================================== Relationships ID Summary ---------------------------------------------------------------------- related to 0000771 Expose alternate shell function usage t... related to 0000465 is the list of special built-ins exhaus... related to 0001025 set description contains counterproduct... ======================================================================
---------------------------------------------------------------------- (0003746) chet_ramey (reporter) - 2017-05-24 13:26 http://austingroupbugs.net/view.php?id=767#c3746 ---------------------------------------------------------------------- Re: http://austingroupbugs.net/view.php?id=767#c3730 > Re: Note: 0003724 > > > If calling "unset" pops such a variable instance, you would see the > > previous instance that may be the instance from another function call > > instead of the global value and I doubt that this is what users like > > to see. > > This is just the dynamic vs. static scoping issue. > > Not really, those are separate issues, Not given what Joerg wrote. The "instance from another function call instead of the global value" is exactly the dynamic vs. static scoping issue. It's the behavior of "pops such a variable instance" you go on to discuss, but that's not what I was referring to. > the real question is whether > "unset" actually destroys all knowledge of the variables named (assuming > it works, ie: ignoring variables that are readonly) or whether it > merely removes the value (no point keeping it, as the only way to > get out of unset state is to give the var some new value) and marks > it as unset. And whether or not "destroying all knowledge of the variables" removes the "shadowing" that a scope stack provides. > The differnce occurs when the variable has some other attribute. > > In the standard, there is only one that matters - export (as once > readonly the var cannot be unset), so the difference is illustrated > by this example, where there is no issue of scoping at all (no > functions at all, just code and globals). > > Assuming that here, X is a totally unknown variable, never before > referenced in any way, not imported from the environment, and not > one of the vars defined by the shell as being set at init time. > > export X > > At this point, the variable X is given the export status, I think > we all agree on that, though as it is still unset, it does not > appear in the environment. > > X=string > > now X becomes set, and is added to the environment. Correct, since the standard states that a variable is not set unless it has been assigned a value. That's why I support the view that `local x' by itself does not set a variable x: because it hasn't been assigned a value. The value inheritance question then becomes relevant. > Re: Note: 0003729 > > We're talking how shells are implementing it, > > We shouldn't be, or no at that level of detail - the model that is > implemened, or stated another way, the effect of the command, in > various shells is something to be considered. How any of them > actually makes that effect happen is irrelevant. Agreed -- the standard has never cared about how things are implemented, or whether a particular feature is "easy" to implement. Since shell internals differ so wildly, how could it? > If a script inherits values with local a sequence like: > unset foo; readonly foo; > f() { local foo; foo=$IFS; }; > > should produce a name not found, or name not localizable error; > since it would also inherit the "do not set this name" attribute > of foo when trying to inherit the value. > > Definitely not "name not found", but an error, yes, and both bash > and ash derived shells generate an error for this. bash on the > "local" of a readonly var. We don't object to that, but the local > variable (whose value has been saved) is still readonly si the attempt > to assign to it fails. I actually make that a special case for `readonly'. The reasoning, based on ancient bug reports, is that a variable is made readonly for a reason, and a function -- running in the same execution context as the calling shell - should not be able to override that. Issue History Date Modified Username Field Change ====================================================================== 2013-10-11 02:02 dwheeler New Issue 2013-10-11 02:02 dwheeler Status New => Under Review 2013-10-11 02:02 dwheeler Assigned To => ajosey 2013-10-11 02:02 dwheeler Name => David A. Wheeler 2013-10-11 02:02 dwheeler Section => XCU 2.14 (local) 2013-10-11 02:02 dwheeler Page Number => 2374 2013-10-11 02:02 dwheeler Line Number => 75650 2013-10-11 08:31 geoffclare Relationship added related to 0000465 2013-10-15 22:47 dwheeler Note Added: 0001912 2013-10-17 05:52 ranjit Note Added: 0001924 2013-10-20 05:00 shware_systems Note Added: 0001937 2013-11-14 16:08 geoffclare Relationship added related to 0000771 2015-04-23 23:12 emaste Issue Monitored: emaste 2016-07-05 09:35 joerg Note Added: 0003285 2016-12-01 16:51 eblake Relationship added related to 0001025 2017-05-19 21:39 mirabilos Note Added: 0003699 2017-05-19 22:12 stephane Note Added: 0003701 2017-05-22 11:19 joerg Note Added: 0003702 2017-05-22 11:20 joerg Note Edited: 0003702 2017-05-22 11:20 joerg Note Edited: 0003702 2017-05-22 11:21 joerg Note Edited: 0003702 2017-05-22 19:38 stephane Note Added: 0003703 2017-05-22 23:06 shware_systems Note Added: 0003704 2017-05-23 03:41 kre Note Added: 0003705 2017-05-23 10:47 shware_systems Note Added: 0003706 2017-05-23 11:07 shware_systems Note Edited: 0003706 2017-05-23 12:06 stephane Note Added: 0003707 2017-05-23 13:08 joerg Note Added: 0003708 2017-05-23 13:18 joerg Note Added: 0003709 2017-05-23 13:19 joerg Note Edited: 0003709 2017-05-23 13:41 chet_ramey Note Added: 0003710 2017-05-23 13:47 joerg Note Added: 0003711 2017-05-23 13:47 chet_ramey Note Added: 0003712 2017-05-23 13:51 joerg Note Added: 0003713 2017-05-23 14:00 chet_ramey Note Added: 0003714 2017-05-23 14:05 chet_ramey Note Added: 0003715 2017-05-23 14:11 stephane Note Added: 0003716 2017-05-23 14:14 chet_ramey Note Added: 0003717 2017-05-23 14:17 joerg Note Added: 0003718 2017-05-23 14:19 stephane Note Added: 0003719 2017-05-23 14:26 chet_ramey Note Added: 0003720 2017-05-23 14:29 chet_ramey Note Added: 0003721 2017-05-23 14:32 chet_ramey Note Added: 0003722 2017-05-23 14:45 joerg Note Added: 0003723 2017-05-23 15:16 chet_ramey Note Added: 0003724 2017-05-23 15:29 stephane Note Added: 0003725 2017-05-23 16:34 shware_systems Note Added: 0003726 2017-05-23 17:28 shware_systems Note Added: 0003727 2017-05-23 17:43 chet_ramey Note Added: 0003728 2017-05-23 18:49 shware_systems Note Added: 0003729 2017-05-23 22:54 kre Note Added: 0003730 2017-05-23 23:38 kre Note Added: 0003731 2017-05-23 23:48 kre Note Edited: 0003731 2017-05-23 23:57 kre Note Edited: 0003731 2017-05-24 00:06 kre Note Added: 0003732 2017-05-24 00:18 kre Note Edited: 0003732 2017-05-24 00:40 kre Note Edited: 0003732 2017-05-24 07:31 shware_systems Note Added: 0003733 2017-05-24 09:25 stephane Note Added: 0003735 2017-05-24 09:53 kre Note Added: 0003736 2017-05-24 10:37 kre Note Added: 0003737 2017-05-24 10:38 kre Note Edited: 0003737 2017-05-24 10:56 joerg Note Added: 0003738 2017-05-24 11:24 stephane Note Added: 0003739 2017-05-24 11:26 stephane Note Edited: 0003739 2017-05-24 11:30 stephane Note Edited: 0003739 2017-05-24 12:08 kre Note Added: 0003740 2017-05-24 12:23 kre Note Added: 0003741 2017-05-24 12:27 kre Note Added: 0003742 2017-05-24 12:42 stephane Note Added: 0003743 2017-05-24 12:59 kre Note Added: 0003744 2017-05-24 13:02 joerg Note Added: 0003745 2017-05-24 13:09 joerg Note Edited: 0003745 2017-05-24 13:20 joerg Note Edited: 0003745 2017-05-24 13:26 chet_ramey Note Added: 0003746 ======================================================================
