Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: Should (t)path = array-unique-special work this way
- X-seq: zsh-workers 37889
- From: Bart Schaefer <schaefer@xxxxxxxxxxxxxxxx>
- To: Zsh hackers list <zsh-workers@xxxxxxx>
- Subject: Re: Should (t)path = array-unique-special work this way
- Date: Fri, 5 Feb 2016 09:15:43 -0800
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed;        d=brasslantern-com.20150623.gappssmtp.com; s=20150623;        h=from:message-id:date:in-reply-to:comments:references:to:subject         :mime-version:content-type;        bh=+LK1z6ZX59D2HX3xJ70MJ5eTxbkGfAIgiH5uUUDqWSY=;        b=IOJlZfBVBUm1Hi+VMcQ5YzYxNAM6wSg4B7gS5JpRgEgtshHdnIx8j9LeahbazToAoG         w6wi+dLXVKIOqqVRgjDhWFncwEpOo8egCy2sOrFC4xeImk2EGyRDrNj4b/YNmg7UYN0V         eEf22TSYdHx+0IY9Q2MD/WXZLSuQrvVtMRIzsrOWN0PyMXs8+q3mGQ0mqDa3Myye4IR/         JQhkozsWy30lyJYOT8AXUgyxXZaQ/TQmaHzmDMzMXmMmpeNfxRtjMVPa7S85c4gF5ai2         qJ3Np0pq2N1i3P5YM4kvkBAczVmrtnSpKP4bYx8temV3U/0IL4jghGxE9xHJNIfk5IJz         +RkQ==
- In-reply-to: <CAKc7PVCDHQDc=sby5wGNEtWCA6omFhmP8uPWbsPXwTQv9tDqFw@mail.gmail.com>
- List-help: <mailto:zsh-workers-help@zsh.org>
- List-id: Zsh Workers List <zsh-workers.zsh.org>
- List-post: <mailto:zsh-workers@zsh.org>
- Mailing-list: contact zsh-workers-help@xxxxxxx; run by ezmlm
- References: <CAKc7PVCDHQDc=sby5wGNEtWCA6omFhmP8uPWbsPXwTQv9tDqFw@mail.gmail.com>
On Feb 5,  2:45pm, Sebastian Gniazdowski wrote:
}
} typeset -U path
} PATH="$PATH:/component/nr1"
} path+="/component/nr2"
} PATH="/component/nr2:$PATH"
} print "${(t)path}"
} declare -p path
I'm not really sure what question(s) you're asking.
Aside:
 Although it works to append to an array with path+="/component/nr2",
 it's really not good form.  Get used to path+=("/component/nr2") and
 you'll have much less trouble later.
Back to main topic:
} Outputs:
} array-unique-special
So far so good.
} typeset -a path
} path=( /component/nr2 /usr/local/bin /usr/bin /bin /usr/games /component/nr1 /component/nr2 )
For 5.3, this will change to
typeset -a path=( /component/nr2 /usr/local/bin /usr/bin /bin /usr/games /component/nr1 /component/nr2 )
Other things you might be asking about:
Q: Why is nr2 repeated when path is declared -U ?
A: Because it's repeated in $PATH.  Array uniqueness of tied arrays is
   only applied when assigning to the array; when assigning to the tied
   scalar, the array faithfully copies the value of the scalar.  If this
   were not the case, you could end up with a feedback loop (scalar is
   changed -> array uniquifies -> scalar changes again -> etc.).  This
   in turn is because scalars don't have a "uniqueness" property, so if
   the user is explicitly assigning to the scalar then we presume it is
   expected to reflect the value so assigned.
Q: Why doesn't -U appear in the "declare -p" output?
A: Good question.  It doesn't appear for non-special arrays either.  It
   may be intentional because -U isn't a POSIX-supported option, but I
   suspect it's just an accidental omission.
Messages sorted by:
Reverse Date,
Date,
Thread,
Author