
このようなスクリプトがあるとしましょう。
#!/bin/bash
array[0]="123"
array[1]="333"
array[2]="5566"
array[3]="135"
array[4]="68"
array[5]="45"
array[6]="78"
array[7]="32"
array[8]="190"
number()
{
size=${#array[@]}
index=$(($RANDOM % $size))
sleep 0.5s
echo Lucky number is ... ${array[$index]}
}
for i in {1..21}; do number; done
わかりました..間隔で任意の数字を取得したいのですが、重複した数字もたくさん表示したいと思います。
Lucky number is ... 135
Lucky number is ... 135
Lucky number is ... 5566
Lucky number is ... 78
Lucky number is ... 190
Lucky number is ... 333
Lucky number is ... 190
Lucky number is ... 135
Lucky number is ... 5566
Lucky number is ... 333
Lucky number is ... 45
Lucky number is ... 45
Lucky number is ... 68
Lucky number is ... 68
Lucky number is ... 333
Lucky number is ... 78
Lucky number is ... 78
Lucky number is ... 5566
Lucky number is ... 78
Lucky number is ... 333
Lucky number is ... 135
私はこの結果が欲しい
Lucky number is ... 135
Lucky number is ... 5566
Lucky number is ... 78
Lucky number is ... 190
Lucky number is ... 333
Lucky number is ... 45
Lucky number is ... 68
このように、私たちは繰り返さずに「幸運の数」を得ることができます。唯一の方法を知っている人はいますか?スクリプトを編集し、21個を9個に減らしました。変更はなく、重複した項目もあります。
Lucky number is ... 135
Lucky number is ... 68
Lucky number is ... 45
Lucky number is ... 333
Lucky number is ... 78
Lucky number is ... 135
Lucky number is ... 135
Lucky number is ... 333
Lucky number is ... 32
答え1
リストを一枚のカードと考えてください。 シャッフル再生数字を1つずつ読んでください。
バラよりBASHシェルで配列要素を混在させる簡単な方法は何ですか?。
#!/bin/bash
array=("123" "333" "5566" "135" "68" "45" "78" "32" "190")
shuffle() {
array=($(shuf -e "${array[@]}"))
index=0
}
number() {
size=${#array[@]}
sleep 0.5s
if (( index >= size )) ; then
shuffle
fi
echo Lucky number is ... ${array[$index]}
index=$((index + 1))
}
for i in {1..21}; do number; done