從三個數字(10、100 和 1000)中隨機選擇的變量

從三個數字(10、100 和 1000)中隨機選擇的變量

是否可以有一個變數從三個預先決定的數字中選擇一個隨機數?

樣本:

var= 10 or 100 or 1000

答案1

使用數組來保存值並使用內建變數在其中進行選擇$RANDOM。例如,

x[0]=10     # One decade
x[1]=100    # One century
x[2]=1000   # One millennium

for ((i=1; i < 20; ++i)); do echo -n " ${x[$RANDOM%3]}"; done; echo
1000 10 10 10 10 100 10 100 100 10 10 100 100 100 10 1000 1000 1000 10

隨機性的品質不會是最好的(從中讀取位元組/dev/urandom),但對於腳本來說應該足夠好。

註1:正如人們在評論中觀察到的那樣,當然可以使用 array litteral: x=(10 100 1000),而不是單獨初始化數組元素。

筆記2:可以透過 提取隨機元素,而不是對數組中的元素數量進行硬編碼${x[$RANDOM%${#x[@]}]}

答案2

如果您正在使用巴什(或者桀騁或者克什93)你可以這樣做:

echo "$((10**($RANDOM%3+1)))"

或者

var=$((10**($RANDOM%3+1)))

將其分配給變數

答案3

您也可以使用 GNU coreutilsshuf公用事業:

a=$(shuf -n1 -e 10 100 1000)

RANDOM不過,按照其他答案使用幾乎肯定會更快。

答案4

這是一個有點神秘的方法:

printf -v var '1%0*d' $(( RANDOM % 3 + 1 )) 0

$var這將根據需要分配隨機值。格式printf字串是1%0Nd- 這會導致0列印時帶有N前導零,其中N將是間隔中的隨機整數[1,3]

相關內容