2011-01-12 36 views
4

這裏的腳本:

#!/bin/ksh 

(for k in $(seq 6); do echo $RANDOM; done) > a.txt 
(for k in $(seq 6); do echo $RANDOM; done) > b.txt 
echo a.txt 
cat a.txt 
echo b.txt 
cat b.txt 

和輸出的一個示例:

a.txt 
9059 
1263 
29119 
14797 
5784 
24389 
b.txt 
1263 
29119 
14797 
5784 
24389 
26689 

注意,生成的重疊數的兩個序列(即,既包含序列1263,29119,14797,5784, 24389)。

回答

3

RANDOM一個簡單的隨機數發生器 。每次引用RANDOM爲 時,都將爲其分配隨機數字序列中的下一個 號碼。
系列中的點 可通過爲RANDOM分配一個數字來設置(請參閱 rand(3))。

這是因爲你將代碼包裝在子殼中。當父shell調用子shell時,即使for循環使用它6次,它也只計算爲對$ RANDOM的一個引用。當父shell調用第二個子shell時,它將從隨機序列中的下一個數字開始,這就是爲什麼您會看到兩個輸出流關閉的原因。如果你刪除了子shell,這種行爲就會消失。

試試這個:

for k in $(seq 6); do echo $RANDOM; done > a.txt 
for k in $(seq 6); do echo $RANDOM; done > b.txt 

注:猛砸沒有這種行爲即使有子shell。

相關問題