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

Re: Printing arrays for use with $()

On Aug 11,  7:01pm, DervishD wrote:
}     Hi Bart :)

"Hi, Raúl!"

}     Impossible for most commands.

Hence the short answer ...

}     So, if I must pass a list of filenames from one app to another in
} the most generic way, which are my options?

It all comes back to having some degree of control over the calling
environment.  For example, if it were sufficient that

	du -s *.whatever
	eval du -s `myscript`

were equivalent, then

	print -r -- ${(q)array}

should be enough.

On Aug 12, 12:28am, DervishD wrote:
} Subject: Re: Printing arrays for use with $()
}     I've been trying this (without success):
}     command $(printf '"%s "' $array) 

Even if that would work (which, as you've seen, it does not) why would
you want to include a trailing space *inside* the double quotes?

}     The worst thing is that I had the intention of using a couple
} more scripts in this way, generating a list of files to work on and
} dumping it to stdout :( but without being able to solve this
} problem...

Well, you could always change tack entirely and instead of

	du -s `myscript`

you could call

	myscript du -s

That is, have your script work the way zargs does.  Or you could modify
zargs to use ${(z)...} on its list of files, and then run

	qzargs -- `myscript` -- du -s

But again all of this assumes you can control the caller, which means
you could just as easily require IFS=$'\0'.  There's just no way around
this, given the semantics of $(...) and word splitting.

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