如何在Shell中遍历文件多行内容并将每行字段分配给多个参数
Shell逐行拆分文件字段为位置参数实现方案
前提说明
你提到已经通过mapfile读取了文件内容到数组,我们基于这个前提给出实现逻辑,同时也提供更简洁的直接读取方案。
基于已有mapfile数组的实现
如果你已经执行了如下读取逻辑:
# -t参数用于去除每行末尾的换行符,all_lines为存储所有行的自定义数组名 mapfile -t all_lines < 你的文件路径
后续遍历处理代码如下:
for line in "${all_lines[@]}"; do # 将当前行按空格拆分后赋值给位置参数$1-$4 set -- $line echo "Args: $1 $2 $3 $4" done
逻辑说明:set -- 命令会将后续传入的内容按空白符分割,依次赋值给位置参数$1、$2……,多余的空字段会自动为空,不会产生多余的输出内容,完全匹配你的需求。
更简洁的直接读取方案(无需提前用mapfile加载所有内容)
如果你不需要提前将所有行存入数组,直接用read命令按字段读取更简单:
while read -r ip p2 p3 p4; do echo "Args: $ip $p2 $p3 $p4" done < 你的文件路径
逻辑说明:read 命令会自动将每行按空白符拆分,依次赋值给后面列出的变量,最多4个字段的场景下刚好完全匹配你的字段分配需求。
内容的提问来源于stack exchange,提问作者Marry Jane
相关产品推荐
相关产品推荐

