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

时间:2015-01-13 17:19:09

标签: linux bash sed

尝试迭代纯文本文件时,我有一种奇怪的行为:

#!/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)

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

提前致谢

2 个答案:

答案 0 :(得分:2)

我会做什么:

#!/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


“双引号”每个包含空格/元字符和每个扩展的文字:"$var""$(command "$var")""${array[@]}""a & b"。使用'single quotes'代码或文字$'s: 'Costs $5 US'ssh host 'echo "$HOSTNAME"'。见
http://mywiki.wooledge.org/Quotes
http://mywiki.wooledge.org/Arguments
http://wiki.bash-hackers.org/syntax/words

答案 1 :(得分:0)

我终于找到了发生的事情。还有一个额外的&#34;&#34;在while语句中。可能我混合了两种不同的方式。

我在哪里:

同时阅读linea in 做     echo $ linea 完成&lt; test.tmp

应该是:

同时阅读linea; ##已删除;加入 做     echo $ linea 完成&lt; test.tmp

再次感谢