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

The elements of enlightenment



I  think I've finally actually figured out the reason that lines aren't elements and elements aren't lines even though they can print exactly the same:

    $ list=( $( setopt ) )

... We get word splitting and the option and the value 'print -l' on different lines and '$#list' is the count of the number of words/lines namely twice the number of options.  Good, fine, and understood.  But I want the option and it's value on the same line, just as if 'setopt' was executed at CLI.  By double quoting: ( "$( setopt )" ) we seem to have solved the problem, it prints correctly.  But trouble lurks in the shadows.   I do this:

    $  list=( "${list[@]/ off/${red} off${nrm}}" )

... And I'm baffled that only the very first 'off' is colorized. Why?  Because '$#list' = 1!  It looks like we have each line as a separate element but we don't.  It only looks that way because the newlines in the output are still in there, they aren't 'print -l' newlines, they're newlines in the data itself!! They look the same but they are *not* the same.  To really get what it looks like I have I must first:

    $ list=( ${(f)list} )

NOW our element count is what we want it to be -- one per line and every 'off' get colored.  Newlines aren't elements and elements aren't newlines.  Finally!  I'll never be fooled by appearances again.  Do I have this right?  Only took ten years :(






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