2017-08-29 50 views
-1

bash腳本:

for c in $(seq 1 10) 
do 
    echo "random value #$c:$(echo "$RANDOM")" 
done 

輸出:

 
random value #1:20892 
random value #2:20892 
random value #3:20892 
random value #4:20892 
random value #5:20892 
random value #6:20892 
random value #7:20892 
random value #8:20892 
random value #9:20892 
random value #10:20892 
+0

請看看[編輯的幫助(HTTP://計算器。 COM /編輯 - 幫助)。 – Cyrus

+1

你究竟是怎麼調用腳本的?換句話說,您用來運行腳本的命令行是什麼? – John1024

+0

我可以用bash 4.3.8來重現這一點,只有這樣:'for $ in $(seq 1 10);' do echo「random value#$ c:$(RANDOM = 42; echo」$ RANDOM「)」;完成' – Cyrus

回答

0

除非你使用的是舊版本的bash,但絕對沒有理由訴諸seq產生你的那個序列。

此外,像echo $(echo something)這樣的東西是完全不需要

更改腳本這兩個顧慮:

for c in {1..10} ; do 
    echo "random value #$c:$RANDOM" 
done 

給你的東西產生正確的數據:

random value #1:3394 
random value #2:6099 
random value #3:21492 
random value #4:17973 
random value #5:22698 
random value #6:15844 
random value #7:28506 
random value #8:1960 
random value #9:23593 
random value #10:17412 

而且,事實上,你腳本還作品(至少在bash 4.3.46),所以我猜你可能已經無意中塞滿了RANDOM變量這裏。您應該意識到,未設置該「變量」可能會導致稍後使用它的問題,並將其設置爲特定值會生成該生成器。

因此,我會在您的bash每個shell啓動腳本中尋找一些可能將RANDOM設置爲特定值的內容。由於$(echo $RANDOM)這個事情會執行該腳本,如果您直接回顯該值,可能會被修復)。

,肯定會引起你的問題,按照下面的演示:

for c in {1..5} ; do 
    RANDOM=7 
    echo "random value #$c:$RANDOM" 
done 

這給:

random value #1:19345 
random value #2:19345 
random value #3:19345 
random value #4:19345 
random value #5:19345 
+0

我認爲這是我使用的一些舊版本的bash。我無法在循環中使用{1..10},因此不得不求助於seq。 – amar

+0

@amar,對於這樣一個小序列,你可以使用'for i in 1 2 3 4 5;做...'。 – paxdiablo

相關問題