Command-Line
將變數設置為數組中的隨機項時如何指定機會?
目前我做這樣的事情來將變數設置為數組中的隨機項:
array=("foo" "bar" "baz") var=${array[$RANDOM % ${#array[@]} ]}
如果我想設置
$var
為這些值之一,但指定變數將分別設置為每個項目的值的機會,我該怎麼辦?假設我想要 73.3% 的機會foo
、26.6% 的機會bar
和 0.1% 的機會baz
。
一種方法:設置一個並行數組,對應的百分比機率;下面,我將它們縮放到 1000。然後,選擇 1 到 1000 之間的隨機數並遍歷數組,直到你用完機會:
#!/bin/bash array=( "foo" "bar" "baz") chances=(733 266 1) choice=$((1 + (RANDOM % 1000))) value= for((index=0; index < ${#array[@]}; index++)) do choice=$((choice - ${chances[index]})) if [[ choice -le 0 ]] then value=${array[index]} break fi done [[ index -eq ${#array[@]} ]] && value=${array[index]} printf '%s\n' "$value"