それを更新します。ランダムIは、配列の項目の数を選択し、最後のセットまで再びそれを行うには、それを更新し、ランダムにしようとしています配列からN項目を選択し、BASHスクリプト内
#! /bin/bash
A=({1..27})
T=${#A[@]} #number of items in the array
N=3 #number of items to be chosen
V=$(($T/$N)) #number of times to loop
echo ${A[@]} " >> ${#A[@]}"
for ((n=0;n<$V;n++)); do
A1=()
for I in `shuf --input-range=0-$((${#A[*]} - 1)) | head -${N}`; do #random chooses N items random
S=`echo ${A[$I]}` #the chosen items
#echo $S
A1+=("$S|") #creates an array with the chosen items
A=("${A[@]/$S}") #deletes the the chosen items from array
done
echo ${A[@]} " >> ${#A[@]}"
echo ${A1[@]} " >> ${#A1[@]}"
done
タイプ私がこのコードを取得している出力の:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 >> 27
1 4 5 6 7 8 9 10 11 1 1 14 15 16 17 18 19 1 2 4 5 6 7 >> 27
20| 2| 3| >> 3
4 6 7 8 9 0 1 4 6 7 8 9 2 4 6 7 >> 27
1| | 5| >> 3
6 7 8 9 0 1 6 7 8 9 2 6 7 >> 27
| | 4| >> 3
7 8 9 0 1 7 8 9 2 7 >> 27
6| | | >> 3
7 8 9 0 1 7 8 9 7 >> 27
| | 2| >> 3
7 9 0 1 7 9 7 >> 27
8| | | >> 3
7 9 1 7 9 7 >> 27
| | 0| >> 3
7 9 1 7 9 7 >> 27
| | | >> 3
1 >> 27
9| 7| | >> 3
なぜそれが最初に正常に動作し、最後に失敗するか?
将来は '#!/ bin // bash'行の後に' set -x'を使って、デバッガモードでスクリプトを実行してください。私は、 'A =({1..5}) 'という最小限の入力を維持することによって、配列Aからの不適切な削除を根本原因にしました。 – Inian
また、コマンド出力の処理に 'for-loop'を使用せず、適切に' IFS'を使用して、プロセス置換で 'while-loop'を使用してください。 – Inian