To:
woof() {
/usr/bin/woof -p $(expr $RANDOM % 32768 + 1024) $@
}
Zawsze zwraca tę samą liczbę dla parametru -p na zsh. W bash $(...)
ocenia się przy każdym połączeniu. Wymiana $( ... )
z $[ ... ]
„naprawia” to „problem” w zsh dla mnie, ale to, co jest kwestia czy różnica, która powoduje nieoczekiwane zachowanie (nieoczekiwany dla mnie przynajmniej)?
Odpowiedzi:
$( )
właściwie zachowuje się w ten sam sposób, to nie RNG.Wydaje się, że zsh RNG jest zaawansowany dopiero po odwołaniu się do wartości, ale nie jest ponownie wprowadzany podczas rozwidlania. Oznacza to, że podpowłoki będą nadal dziedziczyć stare ziarno od rodzica, ponieważ wszelkie zmiany zachodzące w podpowłoce nie wpływają na proces nadrzędny. Używanie
$[…]
nie ma tego problemu, ponieważ nie tworzy podpowłoki.Według strony
zshall(1)
podręcznika:Test:
źródło
$( )
ma podobny efekt - w tym przypadku - do użycia$[ ]