На самом деле $( )
ведет себя так же, но это не ГСЧ.
Кажется, что zsh RNG продвигается только после обращения к значению, но не повторяется при разветвлении. Это означает, что подоболочки будут просто наследовать старое начальное число от родительского, так как любые изменения, происходящие в подоболочке, не влияют на родительский процесс. Использование $[…]
не имеет этой проблемы, так как не создает подоболочки.
Согласно справочной странице 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.
Тестовое задание:
% echo outer=$RANDOM; (echo inner=$RANDOM); (echo inner=$RANDOM);
outer=10246
inner=5606
inner=5606