From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 14265 invoked by alias); 6 May 2015 17:37:17 -0000 Mailing-List: contact zsh-users-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Users List List-Post: List-Help: X-Seq: 20181 Received: (qmail 15312 invoked from network); 6 May 2015 17:37:14 -0000 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-2.7 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,HTML_MESSAGE,RCVD_IN_DNSWL_LOW autolearn=ham version=3.3.2 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:content-type:subject:message-id:date:to:mime-version; bh=ovBIyZG6bYmy/AcjJpNXW7ItVnHsCUlvNBNkjpLKG1k=; b=nWugX1yOSxeYFmVAMv6Fsi0ytueaXZc9Z/q1tD7M5ZGfKrR1ZWjbJaAEJlqo0fwTbh x7CVOpMUCoyhbc9Dm/n2IIOfvOxtpyV6B332skmYki1CheIXEmAmrEVQwSr4h5BuA5GY SLDTgrUErCNg7R+Gl4xYg85yBQ9rKS65Ce6/DgYSS9Gmo2MfA1J1uyyI9GnjfGjSyiJI PuBxmMz/0P8IC1e4tb7GVVglfew5jplGo/OdFb4vsQh9KYStyntyPbmyz2/OOQWVn5gH HeEhRekMfdVw2LkiQU9TTeUYT2E14DIuBDlknwqhbyW0DIDlrWJt2Jp5VgL3qKpgfWUe rgqw== X-Received: by 10.70.136.169 with SMTP id qb9mr1680725pdb.46.1430933828928; Wed, 06 May 2015 10:37:08 -0700 (PDT) From: Kannan Varadhan Content-Type: multipart/alternative; boundary="Apple-Mail=_C48B6813-A51C-4956-B828-9BA390A61B68" Subject: new user questions and issues Message-Id: <67F1153E-5D3C-4D29-BDD0-1BB9C71FF55A@gmail.com> Date: Wed, 6 May 2015 10:37:09 -0700 To: zsh-users@zsh.org Mime-Version: 1.0 (Mac OS X Mail 8.2 \(2098\)) X-Mailer: Apple Mail (2.2098) --Apple-Mail=_C48B6813-A51C-4956-B828-9BA390A61B68 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=us-ascii Been a long time user of ksh, switching to try zsh. My version: ~ 1% uname -a = 0:26:57 Darwin KVARADHA-M-40SH 14.3.0 Darwin Kernel Version 14.3.0: Mon Mar 23 = 11:59:05 PDT 2015; root:xnu-2782.20.48~5/RELEASE_X86_64 x86_64 ~ 2% echo $ZSH_VERSION = 0:26:59 5.0.5 ~ 3% echo $ZSH_PATCHLEVEL = 0:27:18 zsh-5.0.5-0-g79abe00 ~ 4% = 0:27:23 Four Issues in this one email, sorry: Issue #1: Programmatic Scripting, how to? Issue #2. Overridden local variables get echoed? Issue #3. Typeset -U from within a nested function behaves = unpredictably (1) Issue #4. Typeset -U from within a nested function really seems to get = ignored (2) Details below. Wondering if these are known, and how to either report = or address. Thanks, Kannan Issue #1: Programmatic Scripting, how to? I would like to do the following: for var in path infopath manpath cdpath ; do typeset -agU $var local capsvar capsvar=3D$(echo $var | tr 'a-z' 'A-Z') $var=3D( $(echo ${$capsvar} | sed 's/:/ /g') ) done But this does not work, because ${$capsvar} gets me a zsh: bad = substitution. Is there any way to achieve this in zsh? Issue #2. Overridden local variables get echoed? ~ 5% cat lib/zsh/test2 = 9:55:52 function test2=20 print why is the previous value echoed when a local variable is = 'overridden?' local _t2 for _t2 in 0 1 2 ; do local _t3 _t3=3DXXX__${_t2}__ done } set -x ~ 6% autoload test2 = 9:55:55 ~ 7% test2 = 9:56:01 +test2:1> print why is the previous value echoed when a local variable = is 'overridden?' why is the previous value echoed when a local variable is overridden? +test2:3> local _t2 +test2:4> _t2=3D0 +test2:5> local _t3 +test2:6> _t3=3DXXX__0__ +test2:4> _t2=3D1 +test2:5> local _t3 _t3=3DXXX__0__ +test2:6> _t3=3DXXX__1__ +test2:4> _t2=3D2 +test2:5> local _t3 _t3=3DXXX__1__ +test2:6> _t3=3DXXX__2__ ~ 8% = 9:56:03 Issue #3. Typeset -U from within a nested function behaves = unpredictably (1) Consider the following two functions: ap and _ap. ~ 1% cat lib/zsh/ap lib/zsh/_ap = 10:11:21 function ap { local _api for _api in "$@" ; do _ap "" PATH $_api/bin $_api/sbin done } autoload _ap function _ap { local _shift _envar _enval _i _shift=3D$1 ; shift _envar=3D$1 ; shift : '***' EXPECT FULL PATH VARIABLE BELOW '***' _enval=3D$(eval echo \$$_envar) } # guarantee uniqueness : PATH =3D $PATH typeset -U PATH ~ 2% = 10:11:27 ~ 2% = 10:11:29 ~ 2% setopt KSH_AUTOLOAD = 10:11:30 ~ 3% autoload ap = 10:11:39 ~ 4% set -x = 10:12:37 ~ 5% ap x y = 10:12:39 +-zsh:7> ap x y +ap:7> autoload _ap +ap:1> local _api +ap:2> _api=3Dx +ap:3> _ap '' PATH x/bin x/sbin +ap:9> : PATH '=3D' = /Users/kvaradha/sbin:/Users/kvaradha/bin:/opt/local/sbin:/opt/local/bin:/u= sr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:./bin:./sbin:../bi= n:../sbin +ap:10> typeset -U PATH +_ap:1> local _shift _envar _enval _i +_ap:2> _shift=3D'' +_ap:2> shift +_ap:3> _envar=3DPATH +_ap:3> shift +_ap:4> : '***' EXPECT FULL PATH VARIABLE BELOW '***' +_ap:5> _enval=3D+_ap:5> eval echo '$PATH' +(eval):1> echo +_ap:5> _enval=3D'' +ap:2> _api=3Dy +ap:3> _ap '' PATH y/bin y/sbin +_ap:1> local _shift _envar _enval _i +_ap:2> _shift=3D'' +_ap:2> shift +_ap:3> _envar=3DPATH +_ap:3> shift +_ap:4> : '***' EXPECT FULL PATH VARIABLE BELOW '***' +_ap:5> _enval=3D+_ap:5> eval echo '$PATH' +(eval):1> echo = /Users/kvaradha/sbin:/Users/kvaradha/bin:/opt/local/sbin:/opt/local/bin:/u= sr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:./bin:./sbin:../bi= n:../sbin +_ap:5> = _enval=3D/Users/kvaradha/sbin:/Users/kvaradha/bin:/opt/local/sbin:/opt/loc= al/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:./bin:./s= bin:../bin:../sbin ~ 6% = 10:12:4 If I remove the typeset -U PATH in _ap, as: ~ 1% cat lib/zsh/_ap = 10:15:28 function _ap { local _shift _envar _enval _i _shift=3D$1 ; shift _envar=3D$1 ; shift : '***' EXPECT FULL PATH VARIABLE BELOW '***' _enval=3D$(eval echo \$$_envar) } # guarantee uniqueness : PATH =3D $PATH : typeset -U PATH ~ 2% = 10:15:35 ~ 2% = 10:15:36 ~ 2% setopt KSH_AUTOLOAD = 10:15:36 ~ 3% autoload ap = 10:15:40 ~ 4% set -x = 10:15:43 ~ 5% ap x y = 10:15:52 +-zsh:7> ap x y +ap:7> autoload _ap +ap:1> local _api +ap:2> _api=3Dx +ap:3> _ap '' PATH x/bin x/sbin +ap:9> : PATH '=3D' = /Users/kvaradha/sbin:/Users/kvaradha/bin:/opt/local/sbin:/opt/local/bin:/u= sr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:./bin:./sbin:../bi= n:../sbin +ap:10> : typeset -U PATH +_ap:1> local _shift _envar _enval _i +_ap:2> _shift=3D'' +_ap:2> shift +_ap:3> _envar=3DPATH +_ap:3> shift +_ap:4> : '***' EXPECT FULL PATH VARIABLE BELOW '***' +_ap:5> _enval=3D+_ap:5> eval echo '$PATH' +(eval):1> echo = /Users/kvaradha/sbin:/Users/kvaradha/bin:/opt/local/sbin:/opt/local/bin:/u= sr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:./bin:./sbin:../bi= n:../sbin +_ap:5> = _enval=3D/Users/kvaradha/sbin:/Users/kvaradha/bin:/opt/local/sbin:/opt/loc= al/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:./bin:./s= bin:../bin:../sbin +ap:2> _api=3Dy +ap:3> _ap '' PATH y/bin y/sbin +_ap:1> local _shift _envar _enval _i +_ap:2> _shift=3D'' +_ap:2> shift +_ap:3> _envar=3DPATH +_ap:3> shift +_ap:4> : '***' EXPECT FULL PATH VARIABLE BELOW '***' +_ap:5> _enval=3D+_ap:5> eval echo '$PATH' +(eval):1> echo = /Users/kvaradha/sbin:/Users/kvaradha/bin:/opt/local/sbin:/opt/local/bin:/u= sr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:./bin:./sbin:../bi= n:../sbin +_ap:5> = _enval=3D/Users/kvaradha/sbin:/Users/kvaradha/bin:/opt/local/sbin:/opt/loc= al/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:./bin:./s= bin:../bin:../sbin ~ 6% = 10:15:53 Issue #4. Typeset -U from within a nested function really seems to get = ignored (2) Consider the same two functions: ap and _ap. ~ 1% typeset -U = 10:30:44 ~ 2% setopt KSH_AUTOLOAD = 10:30:50 ~ 3% autoload ap = 10:30:55 ~ 4% cat lib/zsh/_ap = 10:30:57 function _ap { local _shift _envar _enval _i _shift=3D$1 ; shift _envar=3D$1 ; shift set -x for _i in "$@" ; do : '***' EXPECT FULL PATH VARIABLE BELOW '***' _enval=3D$(eval echo \$$_envar) export $_envar=3D$_i:$_enval done set +x } set -x # guarantee uniqueness : PATH =3D $PATH typeset -U PATH set +x ~ 5% ap x x x = 10:31:01 +ap:15> : PATH '=3D' = /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin +ap:16> typeset -U PATH +ap:17> set +x +_ap:5> _i=3Dx/bin +_ap:6> : '***' EXPECT FULL PATH VARIABLE BELOW '***' +_ap:7> _enval=3D+_ap:7> eval echo '$PATH' +(eval):1> echo +_ap:7> _enval=3D'' +_ap:8> export 'PATH=3Dx/bin:' +_ap:5> _i=3Dx/sbin +_ap:6> : '***' EXPECT FULL PATH VARIABLE BELOW '***' +_ap:7> _enval=3D+_ap:7> eval echo '$PATH' +(eval):1> echo x/bin: +_ap:7> _enval=3Dx/bin: +_ap:8> export 'PATH=3Dx/sbin:x/bin:' +_ap:10> set +x +_ap:5> _i=3Dx/bin +_ap:6> : '***' EXPECT FULL PATH VARIABLE BELOW '***' +_ap:7> _enval=3D+_ap:7> eval echo '$PATH' +(eval):1> echo = /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin +_ap:7> _enval=3D/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin= +_ap:8> export = 'PATH=3Dx/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin' +_ap:5> _i=3Dx/sbin +_ap:6> : '***' EXPECT FULL PATH VARIABLE BELOW '***' +_ap:7> _enval=3D+_ap:7> eval echo '$PATH' +(eval):1> echo = x/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin +_ap:7> = _enval=3Dx/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin +_ap:8> export = 'PATH=3Dx/sbin:x/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11= /bin' +_ap:10> set +x +_ap:5> _i=3Dx/bin +_ap:6> : '***' EXPECT FULL PATH VARIABLE BELOW '***' +_ap:7> _enval=3D+_ap:7> eval echo '$PATH' +(eval):1> echo = x/sbin:x/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin +_ap:7> = _enval=3Dx/sbin:x/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X1= 1/bin +_ap:8> export = 'PATH=3Dx/bin:x/sbin:x/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/o= pt/X11/bin' +_ap:5> _i=3Dx/sbin +_ap:6> : '***' EXPECT FULL PATH VARIABLE BELOW '***' +_ap:7> _enval=3D+_ap:7> eval echo '$PATH' +(eval):1> echo = x/bin:x/sbin:x/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/b= in +_ap:7> = _enval=3Dx/bin:x/sbin:x/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/= opt/X11/bin +_ap:8> export = 'PATH=3Dx/sbin:x/bin:x/sbin:x/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/= sbin:/opt/X11/bin' +_ap:10> set +x ~ 6% typeset -U = 10:31:12 ~ 7% echo $PATH = 10:31:16 = x/sbin:x/bin:x/sbin:x/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/op= t/X11/bin ~ 8% typeset -U PATH = 10:31:26 ~ 9% echo $PATH = 10:31:29 x/sbin:x/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin ~ 10% typeset -U = 10:31:32 = PATH=3Dx/sbin:x/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/= bin ~ 11% = 10:31:35= --Apple-Mail=_C48B6813-A51C-4956-B828-9BA390A61B68--