当我试图迭代一个纯文本文件时,我有一种奇怪的行为:
#!/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)
我附上这两个文件是为了帮助澄清这里正在发生的事情:
提前感谢
发布于 2015-01-16 14:58:45
我终于找到了发生了什么。在while语句中有一个额外的"in“。可能我混合了两种不同的时间。
我拥有的地方:
同时在do回波$linea中读线做< test.tmp
它应改为:
当阅读线;##在删除和添加 do回声$linea完成< test.tmp
再次感谢
发布于 2015-01-13 17:23:25
我要做的是:
#!/bin/bash
while IFS= read -r linea; do
printf '%s\n' "$linea"
done < <(sed -n "5,5p" test.tmp)
< <( )
是进程替换,请检查
http://mywiki.wooledge.org/ProcessSubstitution
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
https://stackoverflow.com/questions/27927813
复制相似问题