我试图找到最有效的方法来迭代某些值,这些值在用空格分隔的单词列表中彼此保持一致的值数(我不想使用数组)。例如,
list="1 ant bat 5 cat dingo 6 emu fish 9 gecko hare 15 i j"
因此,我希望能够仅遍历list并仅访问1,5,6,9和15。
编辑:我应该明确指出,我要从列表中获取的值的格式不必与列表的其余部分不同。使它们与众不同的仅仅是它们在列表中的位置(在这种情况下,位置1,4,7 ...)。因此,列表可能是,1 2 3 5 9 8 6 90 84 9 3 2 15 75 55
但我仍然想要相同的数字。而且,假设我不知道列表的长度,我希望能够做到这一点。
到目前为止,我想到的方法是:
方法一
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
那么最有效的方法是什么,或者我缺少一种更简单的方法?