gpt4 book ai didi

bash - 尾随换行符和内置的 bash 'read'

转载 作者:行者123 更新时间:2023-11-29 09:32:15 29 4
gpt4 key购买 nike

在 bash 中,这有效:

echo -n $'a\nb\nc\n' | while read x; do echo = $x =; done

while循环三次

= a =
= b =
= c =

但是想象一个没有传统尾随换行符的文本文件。我认为 read 应该仍然适用于所有三行,但事实并非如此。我只是得到:

echo -n $'a\nb\nc' | while read x; do echo = $x =; done

= a =
= b =

bash 中的help read 并没有真正阐明。

注意:我不需要解决这个问题,我可以找到一些自己修复它的方法。我很好奇,我很想提交错误报告——我通常会尽量尊重可能没有尾随换行符的文件。我在使用 -d 选项进行阅读时遇到了这个问题。 read -d "" 将按空格而不是换行符拆分,但它将错过最后一个条目,除非它有尾随空格。

(Ubuntu.GNU bash,版本 4.1.5(1)-release)

最佳答案

如果你想让上面的循环处理不完整的行,这样做:

echo -n $'a\nb\nc' | while read x || [[ $x ]]; do echo = $x =; done

给出:

= a =
= b =
= c =

read 遇到不完整的行时,它会将其读入变量(在本例中为 x),但会返回一个非零退出代码,这将结束循环, 和 || [[ $x ]] 也负责为不完整的行运行循环。下次调用 read 时,没有任何内容可读取,它以 1 退出,同时将 x 设置为空字符串,以确保我们结束循环。


相关

关于bash - 尾随换行符和内置的 bash 'read',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8598980/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com