Command-Line

將變數設置為數組中的隨機項時如何指定機會?

  • February 5, 2019

目前我做這樣的事情來將變數設置為數組中的隨機項:

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"

引用自:https://unix.stackexchange.com/questions/498638