我試圖隨機選擇一些數組的項目,然後更新它做一遍,直到最後一集:隨機選擇了N項從陣列和BASH更新SCRIPT
#! /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