Subshells (as created by backticks, or their modern replacement $()
) execute in a different context from the parent shell -- meaning that when they exit, all process-local state changes -- including the random number generator's state -- are thrown away.
Reading from $RANDOM
inside the parent shell updates the RNG's state, which is why the echo $RANDOM >/dev/null
has an effect.
That said, don't do that. Do something like this, which has no subshells at all:
point=
for ((i=0; i<10; i++)); do
point+=$(( (RANDOM > 16383) ? 0 : 1 ))
done
If you test this generating more than 10 digits -- try, say, 1000, or 10000 -- you'll also find that it performs far better than the original did.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…