Question: I know how to easily generate a list this way :

`echo {a,b,c,d}_{0..3}`

which will give:

`a_0 a_1 a_2 a_3 b_0 b_1 b_2 b_3 c_0 c_1 c_2 c_3 d_0 d_1 d_2 d_3`

But how to generate the same list, but with the second brace being expended with an higher priority, to obtain this? :

`a_0 b_0 c_0 d_0 a_1 b_1 c_1 d_1 a_2 b_2 c_2 d_2 a_3 b_3 c_3 d_3`

Any trick like sorting from the end, or from character *n* is OK, as long as it fits on one line. I am also using zsh, but something working with bash is fine.

Answer: 
I also found an other solution (zsh only), needlessly complex and therefore interesting:

`print {a,b,c,d}_${^=${$+0 1 2 3}}`

What is doing zsh here? It starts with last nested brace and:

* check if $$ exist, so use "0 1 2 3" (operator +)
* split it into an array (operator =)
* apply distribution of each element to the string, like brace expansion (operator ^)
* finally apply expansion of the first brace (because of the lower priority of brace expansion compared to parameter expansion)

Note that I must expand `{0..3}` myself, as no flag/operator can trigger a preliminary expansion of this kind AFAIK (except `eval` as explained above).
```
eval echo \{a..d\}_{0..3}

```

is enough

The first expansion -- by the shell -- is to

```
{a..d}_0 {a..d}_1 {a..d}_2 {a..d}_3

```

the second expansion by eval is then

```
a_0 b_0 c_0 d_0 a_1 b_1 c_1 d_1 a_2 b_2 c_2 d_2 a_3 b_3 c_3 d_3

```

The result is sent to stdout.