gpt4 book ai didi

bash - 为什么第一个词会丢失?

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

运行以下命令给出了意想不到的(对我来说)结果。

(echo -n foo; sleep 4; echo bar) | while :; do read -t2 r; echo "###$r@@@"; done
###@@@
###@@@
###bar@@@
###@@@
...

我想知道“foo”去了哪里。我希望它被第一个 read 调用作为部分行读取。我希望得到如下内容:

(echo -n foo; sleep 4; echo bar) | while :; do read -t2 r; echo "###$r@@@"; done
###foo@@@
###@@@
###bar@@@
###@@@
...

因为显然这种行为(或其文档)“最近”发生了变化,所以这里是我的 bash 版本。

bash --version
GNU bash, version 4.3.42(1)-release (x86_64-unknown-linux-gnu)

最佳答案

-t 选项的文档说:

Cause read to time out and return failure if a complete line of input is not read within timeout seconds.

由于 foo 回显后没有换行符,前两个 read 无法读取完整的输入行,因此超时并返回失败。它不会将部分输入分配给 $r,而只是将其丢弃。

第三次 read 成功,因为 bar 后面跟了一个换行符,所以它被读取为一个完整的行。

以上内容来自 bash 4.3 之前的版本。你写的似乎应该在 4.3+ 中工作,我不确定为什么它仍然像旧版本一样工作。

关于bash - 为什么第一个词会丢失?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36706769/

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