灰
cat in|while read s
do call "$s"
done
这需要进行修改,以便它仅针对 arg+n 行运行。例如:a.sh 5
cat in|while read s
n=10
for lines arg0 through arg0+n
do call "$s"
done
答案1
在将输入提供给读取循环之前,将其过滤为仅相关行会更快、更干净:
n=10
start=$1
end=$((start+n))
cat in | sed "${start},${end}!d" | while read s; do
call "$s"
done
注意:打印第 $1 行到第 $1+n 行实际上会打印 n+1 行(例如,打印第 5 行到第 15 行实际上是 11 行)。如果要打印从 $1 开始的 n 行,请使用end=$((start+n-1))
。
答案2
lines=10
current=0
while read line; do
current=current+1
if [ "$current" -gt "$lines" ] then exit 0; fi
if [ "$current" -gt "$1" ] then call "$line"; fi
done < in