他のコンテキストで変数を使用しない場合、$RANDOM
変数を印刷すると同じ結果が表示されます。zsh
これは、シェルにコマンド出力または変数値のキャッシュがあるため、新しい値を取得できないのと同じです。私はこれを実行しています:
zsh $ printf \\$(printf "%o" $(( $RANDOM % 123)))\\$(printf "%o" $(( $RANDOM % 123)))
これは2回同じ結果$RANDOM
であり、他の連続実行でもまだ最初の実行と同じ結果が得られます。
それでも同じことをします。printf \\$(printf "%o" $(( $(echo $RANDOM) % 123)))\\$(printf "%o" $(( $(echo $RANDOM) % 123)))
ベストアンサー1
の財産ですzsh
。またman zshparam
見てくださいRANDOM
:
RANDOM値は、意図的に繰り返される疑似乱数シーケンスを形成します。 RANDOM を参照するサブシェルは、RANDOM 値がサブシェル呼び出しの間に親シェルで参照またはシードされない限り、同じ擬似乱数値を生成します。
内部サブシェルを評価しているため、$RANDOM
予想される結果は次のとおりです。
$ RANDOM=123
$ echo $(echo $RANDOM) $(echo $RANDOM) $(echo $RANDOM)
17313 17313 17313
Bashまたはbusybox ashで同じコマンド:
$ echo $(echo $RANDOM) $(echo $RANDOM) $(echo $RANDOM)
12554 22752 18907
異なるシェル、異なるアクション。
他の例zsh
:
$ RANDOM=123
$ echo $RANDOM $(echo $RANDOM) $RANDOM $(echo $RANDOM) $RANDOM
17313 7829 7829 9329 9329
親シェルで使用されるたびに、$RANDOM
後続のサブシェルには擬似ランダムな順序で次の番号が割り当てられます。ただし、子シェルは親シェルに影響を与えないため、$RANDOM
親シェルを再利用すると数字が繰り返されます。