尝试迭代纯文本文件时,我有一种奇怪的行为:
#!/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)
我附上这两个文件是为了帮助澄清这里发生的事情:
提前致谢
答案 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
再次感谢