zsh-users
 help / color / mirror / code / Atom feed
From: "Bart Schaefer" <schaefer@candle.brasslantern.com>
To: zsh-users@sunsite.auc.dk
Subject: Re: Anonymous array indexing
Date: Wed, 13 Dec 2000 04:06:10 +0000	[thread overview]
Message-ID: <1001213040610.ZM11053@candle.brasslantern.com> (raw)
In-Reply-To: <20001212184156.I11810@rmtc>

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   


  parent reply	other threads:[~2000-12-13  4:07 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2000-12-13  1:41 Steve Talley
2000-12-13  4:04 ` Dan Nelson
2000-12-13  4:06 ` Bart Schaefer [this message]
2000-12-13 17:05   ` Steve Talley
2000-12-13 17:39     ` Bart Schaefer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1001213040610.ZM11053@candle.brasslantern.com \
    --to=schaefer@candle.brasslantern.com \
    --cc=zsh-users@sunsite.auc.dk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).