GeneCode Asked: 2020-01-16 21:22:58 +0800 CST2020-01-16 21:22:58 +0800 CST 2020-01-16 21:22:58 +0800 CST 跳过 while 循环的前 3 行 772 我有这个代码。 while IFS= read do read -r read -r read -r echo $REPLY done <<< "$LINES" 和LINES中的数据: ---- Test ---- 1,2,3 1,2,4 etc 我想跳过前 3 行并仅从第 4 行开始处理。我试过 read -r 但似乎不起作用。我想要输出: 1,2,3 1,2,4 etc linux bash 3 个回答 Voted Best Answer Jetchisel 2020-01-16T23:07:52+08:002020-01-16T23:07:52+08:00 这是更具体的 bash 语法。 i=3 n=0 while read -r line; do ((n >= i )) && echo "$line" ((n++)) done < file Abishek J 2020-01-17T08:34:07+08:002020-01-17T08:34:07+08:00 考虑到变量的内容与上面提到的相似,从第 4 行读取数据$LINE是一种解决方案。可以这样做, tail +4 <<< "$LINE" 这将打印从第 4 行$LINE到遇到最后一行的每一行。 如果您希望其结果在内部使用while,这会做得更好, while IFS= read -r; do echo $REPLY; done <<< "$(tail +4 <<< "$LINE")". steeldriver 2020-01-17T05:10:34+08:002020-01-17T05:10:34+08:00 这取决于您想对这些行做什么,但如果您可以将其包装在回调中并拥有 bash 版本 4+,那么您可以使用mapfile(或其同义词readarray)及其-s(skip) 选项。 前任。给定 $ echo "$LINES" ---- Test ---- 1,2,3 1,2,4 etc 然后在定义之后 myfunc() { printf "%s\n" "$2"; } 你可以做 $ mapfile -t -s3 -c1 -C 'myfunc' <<< "$LINES" 1,2,3 1,2,4 etc
这是更具体的 bash 语法。
考虑到变量的内容与上面提到的相似,从第 4 行读取数据
$LINE
是一种解决方案。可以这样做,这将打印从第 4 行
$LINE
到遇到最后一行的每一行。如果您希望其结果在内部使用
while
,这会做得更好,while IFS= read -r; do echo $REPLY; done <<< "$(tail +4 <<< "$LINE")"
.这取决于您想对这些行做什么,但如果您可以将其包装在回调中并拥有 bash 版本 4+,那么您可以使用
mapfile
(或其同义词readarray
)及其-s
(skip) 选项。前任。给定
然后在定义之后
你可以做