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

Re: Anonymous array indexing



Thanks Bart/Dan for the replies!

This _almost_ solves my problem, although I think I
oversimplified.  The actual usage of this is in:

    # Find a value for TERMINFO by looking for xterm package
    delegates=(5.9 5.8.1 5.8 5.7 5.6)
    terminfo=( $HOME/$^delegates/pkgs/xterm/lib/terminfo(/) )
    export TERMINFO=$terminfo[1]
    unset terminfo

Unfortunately this doesn't work well with your solution, ie.

    export TERMINFO=${${=:-$HOME/$^delegates/pkgs/xterm/lib/terminfo(/)}[2]}

doesn't even come close to working.  Any ideas for this slightly
more complicated example?

Thanks,

Steve


Bart Schaefer wrote:

> On Dec 12,  6:41pm, Steve Talley wrote:
> } 
> } Is there a compact version of the following:
> } 
> }     fred=(one two three)
> }     export FRED=$fred[2]
> }     unset fred
> } 
> } so that I can avoid having to use the temporary variable fred.
> 
> The general trick is that the nameless parameter ${} always expands to the
> empty string, so ${:-value} always expands to "value".  Then build up from
> there.
> 
> } I am looking for something like
> } 
> }     export FRED=(one two three)[2]
> 
> The value in ${:-value} always starts out as a scalar (a string), so you
> have to explicitly convert to an array before you can index it.
> 
> If the individual words of the array do not contain spaces, you can combine
> word splitting ${=scalar} with ${:-value} to get:
> 
> 	export FRED=${${=:-one two three}[2]}
> 
> If the words will have embedded spaces, you'll have to resort to some other
> kind of splitting.  E.g., ${(f)...} splits at newlines, so you can do:
> 
> 	export FRED=${${(f):-$'one\ntwo has spaces\nthree'}[2]}
> 
> This uses $'...' to turn \n into newlines, then splits on them.  However,
> the $'...' syntax is not available in 3.0.x.  In all versions you can
> instead split on some other character, e.g. on period:
> 
> 	export FRED=${${(s(.)):-one.two has spaces.three}[2]}
> 
> I don't think there is a fully general solution that works when you can't
> choose in advance a character on which to split.  However, I'm guessing
> that the strings in the array are known in advance, and that it is the
> subscript that might vary, so you should be able to work something out.
> 
> -- 
> Bart Schaefer                                 Brass Lantern Enterprises
> http://www.well.com/user/barts              http://www.brasslantern.com
> 
> Zsh: http://www.zsh.org | PHPerl Project: http://phperl.sourceforge.net   



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