Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Belaboring substitution syntax
Ignore this post unless you're the sort of person who loved grammar in
school:
cc=( "${cc[@]/#%^*$~zsh_case${filter}*}" )
... working fine, and approved by Stephane and Roman. But, trying to 'feel' the rightness of it, I sorta get that '[@]' is saying: "process this array line by line" thus preserving array indexes. I'm not sure about the quotes. Quotes seem to mostly combine words into lines -- or should I say that they mostly combine what would be word splitting into bigger elements: array=( "this array" "has" "three elements" ) ... and sometimes the quotes seem to protect stuff from expansion or interpretation: " $ echo "Yar 'en ign'rint fool!" ". In my case, leaving the quotes out doesn't *seem* to matter but I know it would bite me eventually. When would it bite me?
And: " /#%^ " ... it seems to me this is belaboring something simple. Do we not have an operator that says (in English): If string A is a substring of B, then return B, else return nothing. No anchors, no negation. Inventing '!!' as my operator (yes I know it won't work but just for discussion):
cc=( "${cc[@]!!$~zsh_case${filter}}" )
One operator instead of four. Actually, in such a construction the anchors would say: ... furthermore the substring must start at the beginning of the element:
cc=( "${cc[@]!!#$~zsh_case${filter}}" )
... or must end at the end of the element:
cc=( "${cc[@]!!%$~zsh_case${filter}}" )
... This wouldn't be a fancy substitution so much as a truth test with nulling of 'false'. Dunno, but it seems like a simple thing and one of the first things a shell might be able to do. Instead what we seem to have is a powerful operator that must then be dumbed down.
Not important, but if anyone is interested.
Messages sorted by:
Reverse Date,
Date,
Thread,
Author