$( )
realmente se comporta da mesma maneira, é o RNG que não faz isso.
Parece que o RNG do zsh só é avançado após referenciar o valor, mas não é propagado novamente ao bifurcar. Isso significa que os subshells continuarão herdando a semente antiga do pai, pois as alterações que ocorrem em um subshell não afetam o processo pai. Usar $[…]
não tem esse problema, pois não cria um subnível.
De acordo com a página de manual zshall(1)
:
RANDOM <S>
A pseudo-random integer from 0 to 32767, newly generated each time
this parameter is referenced. The random number generator can be
seeded by assigning a numeric value to RANDOM.
The values of RANDOM form an intentionally-repeatable pseudo-ran‐
dom sequence; subshells that reference RANDOM will result in iden‐
tical pseudo-random values unless the value of RANDOM is refer‐
enced or seeded in the parent shell in between subshell invoca‐
tions.
Teste:
% echo outer=$RANDOM; (echo inner=$RANDOM); (echo inner=$RANDOM);
outer=10246
inner=5606
inner=5606