如何在 bash 中正确打印读取的行

How to correctly print read lines in bash

我在尝试遍历纯文本文件时出现奇怪的行为:

#!/bin/bash
sed -n "5,5p" test.tmp
while read linea in
do 
    echo $linea
done < test.tmp

问题是,从第一个 sed 开始,我得到了我期望的结果,但是从 while 循环中,我没有:

./test.sh 
 (5) Sorgo                                              DICOTILEDONEAS                               1,5-2 l/ha          15
(1)
(2)
(3)
(4)
(5)
(6)

我附上这两个文件是为了帮助澄清这里发生的事情:

提前致谢

我会做什么:

#!/bin/bash

while IFS= read -r linea; do 
    printf '%s\n' "$linea"
done < <(sed -n "5,5p" test.tmp)

< <( )是进程替换,检查
http://mywiki.wooledge.org/ProcessSubstitution
http://wiki.bash-hackers.org/syntax/expansion/proc_subst


"Double quote" 每个包含 spaces/metacharacters 和 每个 扩展的文字:"$var""$(command "$var")""${array[@]}" , "a & b"。使用 'single quotes' 作为代码或文字 $'s: 'Costs US'ssh host 'echo "$HOSTNAME"'。参见
http://mywiki.wooledge.org/Quotes
http://mywiki.wooledge.org/Arguments
http://wiki.bash-hackers.org/syntax/words

我终于知道是怎么回事了。 while 语句中有一个额外的 "in" 。可能我混合了两种不同的时间。

我的位置:

在读linea时 做 回声$linea 完成 < test.tmp

它应该是:

同时阅读linea; ## 在删除和 ;已添加 做 回声$linea 完成 < test.tmp

再次感谢