nachocab
nachocab

Reputation: 14374

How to expand the elements of an array in zsh?

Say I have an array in zsh

a=(1 2 3)

I want to append .txt to each element

echo ${a}.txt # this doesn't work

So the output is

1.txt 2.txt 3.txt

UPDATE:

I guess I can do this, but I think there's a more idiomatic way:

for i in $a; do
    echo $i.txt
done

Upvotes: 5

Views: 2620

Answers (1)

user3620917
user3620917

Reputation:

You need to set RC_EXPAND_PARAM option:

$ setopt RC_EXPAND_PARAM
$ echo ${a}.txt
1.txt 2.txt 3.txt

From zsh manual:

RC_EXPAND_PARAM (-P)
              Array  expansions of the form `foo${xx}bar', where the parameter xx is set to
              (a b c), are substituted  with  `fooabar  foobbar  foocbar'  instead  of  the
              default  `fooa  b  cbar'.   Note that an empty array will therefore cause all
              arguments to be removed.

You can also set this option just for for one array expansion using ^ flag:

$ echo ${^a}.txt
1.txt 2.txt 3.txt
$ echo ${^^a}.txt
1 2 3.txt

Again citing zsh manual:

${^spec}
              Turn on the RC_EXPAND_PARAM option for the evaluation of spec; if the `^'  is
              doubled,  turn it off.  When this option is set, array expansions of the form
              foo${xx}bar, where the parameter xx is set to (a b c), are  substituted  with
              `fooabar foobbar foocbar' instead of the default `fooa b cbar'.  Note that an
              empty array will therefore cause all arguments to be removed.

Upvotes: 7

Related Questions