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 16:20 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... ======================================================================
---------------------------------------------------------------------- (0003747) kre (reporter) - 2017-05-24 16:20 http://austingroupbugs.net/view.php?id=767#c3747 ---------------------------------------------------------------------- Re: Note: 0003746 > Not really, those are separate issues, Not given what Joerg wrote. OK, if you were commenting on just that point. But that is a little strange, as that issue in his example was (I believe) largely irrelevant, the point he was making, as I saw it (and Joerg can correct me if I am mistaken) was that he doubts that users will want to see a new value just "magically" appear (regardless of from where it comes.) That is, I would expect, and I think most average users would expect, that in any situation, with this code ... unset X && test -n "${X+set}" && abort if abort is ever executed - if there is any way to make abort ever be executed, then the shell is broken - badly broken. Note that if X is readonly, the "unset" fails, so the test never gets executed. That's the only way that X should be able to appear as set after unset X, and before it is assigned a new value. When a variable is unset, the one thing everyone should be able to count on, is that it is unset (whatever happens to other attributes, etc.)\ If you need an "unlocal" command, add one. It could even be unset with some strange option given. Just not plain unset. And whether or not "destroying all knowledge of the variables" removes the "shadowing" that a scope stack provides. That was what I meant by that phrase, yes. And that's what I don't think unset should do (or not in any standard usage.) That's why I support the view that `local x' by itself does not set a variable x: Of course not, is there anyone claimimg differently? because it hasn't been assigned a value. but here you are venturing into the unknown. How do you know that? In the sequence X=foo local X X has clearly been assigned a value, you can see it right there. Of course if your "because it hasn't been assigned" was reworded as "because it is not being assigned" then I'd agree. You only get a different opinion if you believe that "local" is creating something new, rather than arrannging to save, and later restore, the value of X. I prefer local to be just like the existing export, and readonly, they set attributes on a variable, they do not create them. This model also does away with scoping questions completely. There only is one scope (just as now in POSIX) - "local" is just doing the equivalent of save_X="${X}" # possibly followed by: unset X and arranging for "return" (including the implicit one at func end, and any exit of the func caused by an abort that does not cause the shell to exit) to do X="${save_X}" but also including attributes, and using anonymous save variables. I think you'd agree that if in X=foo export X X was now unset, no-one would be happy. Why should there be a difference for local? The question of whether after "local X" there should be an implicit "unset X" is not material here (and it seems like we have a reasonable solution to avoid that issue.) 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 2017-05-24 13:41 joerg Note Edited: 0003745 2017-05-24 16:20 kre Note Added: 0003747 ======================================================================