공백으로 구분 된 단어 목록에서 일정한 수의 값을 가진 특정 값을 반복하는 가장 효율적인 방법을 찾으려고합니다 (배열을 사용하고 싶지 않습니다). 예를 들어
list="1 ant bat 5 cat dingo 6 emu fish 9 gecko hare 15 i j"
그래서 목록을 반복하고 1, 5, 6, 9 및 15에만 액세스 할 수 있기를 원합니다.
편집 : 목록에서 가져 오려고하는 값이 나머지 목록과 형식이 다를 필요가 없다는 것을 분명히해야했습니다. 그것들을 특별하게 만드는 것은 전적으로 목록에서 그들의 위치입니다 (이 경우 위치 1,4,7 ...). 그래서 목록은 가능1 2 3 5 9 8 6 90 84 9 3 2 15 75 55
하지만 여전히 같은 숫자를 원할 것입니다. 또한 목록의 길이를 모른다는 가정하에 할 수 있기를 원합니다.
지금까지 내가 생각한 방법은 다음과 같습니다.
방법 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
방법 2
set list
found=false
find=9
while [ $# ne 0 ]; do
if [ $1 -eq $find ]; then
found=true
break
fi
shift 3
done
방법 3 파이핑은 이것이 최악의 옵션이 될 것이라고 확신하지만 호기심에서 set을 사용하지 않는 방법을 찾으려고했습니다.
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
그렇다면 가장 효율적인 방법은 무엇입니까, 아니면 더 간단한 방법이 누락 되었습니까?