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

Re: protect spaces and/or globs

On 2021-02-11 9:19 a.m., Lawrence Velázquez wrote:

Why are you still accreting grepargs like this? Peter has already
shown you how to do this.


Unless your actual code actually modifies the args before adding
them to the array?
Not modified but the ordering is different so I hafta grab them one at a time.
Good point tho, all else equal I see that Peter's method is better.

	% pat='on the current' foo='i,2,light edit' bar='i,1,old stable'
	% grep_wrapper $pat $foo $bar

	what should be going to history:
	grep --color=always -i -- 'on the current' 'i,2,light edit' 'i,1,old stable'
Yes, point made.  I know that if I want something expanded I don't single quote it. But indeed I shouldn't say 'exactly as typed' because I know that variables will be expanded.


A ${(q-)foo} expansion basically re-quotes the value of foo so
it works correctly with eval, in whatever way is requested. It
doesn't know the value's origins.
That's a subtle but important point.  I could think of it as 'protection' but then how did the variable expand?  As you say it must be seen as re-quoting.  Thanks
for catching it.
That's not how quoting works. Quote levels don't nest to produce
some kind of super-quoting. You're misinterpreting the results of
your experimentation.

	% foo='a b c'
	% print -r 'protected: $foo'
	protected: $foo
	% print -r "'not protected: $foo'"
	'not protected: a b c'

The double quotes do protect the single quotes from being interpreted
by the shell, but they also permit expansions.
That is a critical point.  You know, it is so easy to think you've 'got it' when you don't. I'm going to take the above and write it to a sticky note a stick it to my desk.  Very
insightful of you to realize that I'm not seeing things right, many thanks.

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