Tôi đang cố gắng tìm cách hiệu quả nhất để lặp qua các giá trị nhất định là một số lượng giá trị nhất quán cách xa nhau trong danh sách các từ được phân tách bằng dấu cách (tôi không muốn sử dụng một mảng). Ví dụ,
list="1 ant bat 5 cat dingo 6 emu fish 9 gecko hare 15 i j"
Vì vậy, tôi muốn có thể chỉ lặp qua danh sách và chỉ truy cập 1,5,6,9 và 15.
EDIT: Tôi nên nói rõ rằng các giá trị tôi đang cố gắng nhận được từ danh sách không phải khác về định dạng so với phần còn lại của danh sách. Điều khiến họ đặc biệt chỉ là vị trí của họ trong danh sách (Trong trường hợp này, vị trí 1,4,7 ...). Vì vậy, danh sách có thể1 2 3 5 9 8 6 90 84 9 3 2 15 75 55
nhưng tôi vẫn muốn những con số tương tự. Ngoài ra, tôi muốn có thể làm điều đó với giả sử tôi không biết độ dài của danh sách.
Các phương pháp tôi đã nghĩ đến cho đến nay là:
Phương pháp 1
set $list
found=false
find=9
count=1
while [ $count -lt $# ]; do
if [ "${@:count:1}" -eq $find ]; then
found=true
break
fi
count=`expr $count + 3`
done
Phương pháp 2
set list
found=false
find=9
while [ $# ne 0 ]; do
if [ $1 -eq $find ]; then
found=true
break
fi
shift 3
done
Phương pháp 3 Tôi khá chắc chắn rằng đường ống làm cho điều này trở thành lựa chọn tồi tệ nhất, nhưng tôi đã cố gắng tìm một phương pháp không sử dụng được thiết lập, vì tò mò.
found=false
find=9
count=1
num=`echo $list | cut -d ' ' -f$count`
while [ -n "$num" ]; do
if [ $num -eq $find ]; then
found=true
break
fi
count=`expr $count + 3`
num=`echo $list | cut -d ' ' -f$count`
done
Vì vậy, những gì sẽ được hiệu quả nhất, hoặc tôi đang thiếu một phương pháp đơn giản hơn?