簡體   English   中英

$RANDOM 行為異常

[英]$RANDOM behaving strangely

我正在嘗試使用我在網上找到的代碼生成隨機日期時間。 這段代碼使用了 $RANDOM。 奇怪的是,我可以繼續執行腳本,但日期時間結果永遠不會改變。 但是當我添加“echo $Random”時,日期時間結果會發生變化。 是否與隨機變量的播種和執行“回聲”以某種方式重置它有關?

#echo $RANDOM // This causes desire output
x=$(date -d "$((RANDOM%1+2010))-$((RANDOM%12+1))-$((RANDOM%28+1)) $((RANDOM%23+1)):$((RANDOM%59+1)):$((RANDOM%59+1))" '+%d-%m-%Y %H:%M:%S')
echo $x

輸出

INT,1,100128,2018/05/24 08:00:00,1,0,Test
INT,1,100128,2018/05/24 08:00:00,1,0,Test
INT,1,100128,2018/05/24 08:00:00,1,0,Test
INT,1,100128,2018/05/24 08:00:00,1,0,Test

有關播種和echo效果的問題的答案,請參閱Advanced Bash-Scripting Guide中的$RANDOM: generate random integer 簡而言之, $RANDOM值(應該)在每次 Bash 運行時自動播種為隨機值,但如果您需要讓它產生相同的數字序列,則可以通過將其設置為常量值來重新播種次。 運行echo $RANDOM不會重新播種$RANDOM ,但如果它已經播種,它會導致它移動到下一個“隨機”值。

據我所知,Babun 只是帶有一些附加工具和配置的 Cygwin。 我還沒有看到 OP 用 Cygwin Bash 報告的類似問題。 假設 OP 正在運行 Bash(而不是 Zsh,Babun 似乎也提供了),問題的最可能原因是某些東西將$RANDOM重新設定為一個常數值。 我建議仔細檢查代碼以確保沒有分配給RANDOM 一旦排除了這一點,下一個明顯的嫌疑人就是 Bash 的 Babun 啟動文件之一,因為它聲稱進行 shell 自定義。

如果無法識別或修復重新播種RANDOM任何內容,則想到的唯一選擇是在代碼中明確地將其重新播種為合理隨機的內容。 上面引用的文章建議

RANDOM=$$

這是非常弱的,但在這種情況下它可能已經足夠了。 如果不是,上面引用的文章中還有其他建議(例如,涉及/dev/urandom )。 另請參閱為什么 Bash 的 $RANDOM 未在某些機器上播種 (?)? , Unix $RANDOM 函數在 Bash 終端中不是隨機的,而linux bash 中的 $RANDOM 在啟動時總是相同的

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM