Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: [Review Request] Arrays and their usage



Here's my take on answering this (repeating some of what has
already been said).

Greatly appreciated!

First, I'd say: `...` form of command substitution should really
be banned these days. That's really a broken heritage from the
Bourne shell. There's not good reason to keep using it these
days. The main problem with it is the handling of backslash
inside it (and the awkward nesting and the fact that it's less
legible, etc...).

Fun fact: I prefer `...`, because I find it more legible, especially in the x=`cmd y z` form¹. But TIL, that `` and $() are not interchangable. Up to now, I thought the one is syntactic sugar for the other.

The sed command could be written:

   sed -n 's/pkgname = //p'

Good catch, thanks
Then, leaving `...` (or the better $(...)) unquoted performs
IFS-splitting, so you're left with the same kind of conundrum as
you get in POSIX shells when you leave any form of expansion
($param, $((arith)) as well there!) unquoted though at least
zsh doesn't perform globbing there:

[...]

pkgs=(
   ${(f)"$(
     makepkg --printsrcinfo |
      sed -n 's/pkgname = //p'
   )"}
)

Thank you for this detailed explanation. Not relying on IFS seems a good thing to do, although the rest of the script probably does here and there².
Also thanks for this example of code structuring. /me likes.
(NB though: The linebreak for the two pipe elements was inserted for this email only, with me hoping, that backslash newline was the correct thing to do ;))

The more idiomatic zsh variant to that ksh syntax would be:

pkgs=( $DATABASE/$^pkgs )

(same as rc's pkgs = ( $DATABASE/$pkgs )).

What does 'rc' stand for?

Again, thanks for this effort!

- René

¹ Longer story: $() is easily confused with ${}. Also, `...` is more "in the background" and I let my highlighting make it clear to me, that I'm in a subcommand. I would always prefer $() in large complex expressions though, because.

² Although one could argue that setting IFS to something else than $'\n' WILL break a lot of stuff, so one can expect it to be sane.




Messages sorted by: Reverse Date, Date, Thread, Author