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