現在、私は配列内の任意の項目に変数を設定するために、次のことを行います。
array=("foo" "bar" "baz")
var=${array[$RANDOM % ${#array[@]} ]}
これらの値のいずれかに設定したいのですが、変数が各項目の値に個別に設定される可能性を指定した場合は$var
どうなりますか? 73.3%の確率foo
、26.6%の確率bar
、0.1%の確率が欲しいとしましょうbaz
。
ベストアンサー1
1つの方法は、並列配列を構築し、以下で対応するパーセンテージ確率を設定し、それを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"