代码之家  ›  专栏  ›  技术社区  ›  Lisan Al Gaib

文件的最后一行未在shell脚本中读取

  •  2
  • Lisan Al Gaib  · 技术社区  · 8 年前

    我有一个文本文件 foo.txt

    1
    2
    3
    4
    5
    

    我有一个shell脚本,

    file="foo.txt" 
    while IFS= read -r line
    do
       echo "$line"
    done < "$file"
    

    4 .

    1
    2
    3
    4
    

    如何得到预期的产出如下?

    预期产量:

    1
    2
    三
    5
    
    1 回复  |  直到 8 年前
        1
  •  3
  •   anubhava    8 年前

    这是因为输入文件的最后一行缺少换行符。

    您可以使用此循环读取所有内容:

    while IFS= read -r line || [ -n "$line" ]; do
        echo "$line"
    done < "$file"
    

    read 因此不会返回成功 [ -n "$line" ] $line 不是空的。

    printf 要附加换行符,请使用:

    printf '\n' >> "$file"
    

    while IFS= read -r line; do
        echo "$line"
    done < "$file"