Bash中如何用单命令按需从文件描述符读取单行并回显?
寻找替代
read v && echo $v的单行Bash命令 我在编写Bash脚本时,通过exec < <(command)的方式重定向了标准输入,之后需要在遍历命令行参数的循环中,根据条件从新的stdin读取一行内容并立即输出。目前用read v && echo $v实现这个逻辑,但总觉得这种写法太间接——就像Python里先把读取的内容存到变量再打印,而不是直接打印读取的结果。
举个最小可复现示例:
exec < <(tr ' ' \\n<<<'10 100 1000') for i in 1 0 2 0 3 0 4; do if ((i == 0)); then read v && echo $v # 尝试用head -1替代,但第一次输出10后,后续调用就没有内容了 else echo $i fi done
我试过用head -1替换,但它只能读取一次stdin的第一行,之后再调用就输出空内容。后来在代码高尔夫场景里找到一个变通方案:把读取的值直接存入循环变量,再统一输出:
for i in 1 0 2 0 3 0 4; do if ((i == 0)); then read i fi echo $i done
不过我还是好奇,有没有现成的、类似read_one_line这样的命令,可以直接完成“读取一行并回显”的操作?
内容的提问来源于stack exchange,提问作者ShadowRanger
相关产品推荐
相关产品推荐

