cat test.txt
#this is comment
line 1
line 2
#this is comment at line 3
line4
脚本:
result=`awk '/^#.*/ { print }' test.txt `
for x in $result
do
echo x
done
预期产出:
#this is comment
#this is comment at line 3
获得输出:
#this
is
comment
#this
is
comment
at
line
3
但是当我执行此命令awk '/^#.*/ { print }' test.txt
时,
我得到预期的结果。
我把它放在循环中因为我需要一次捕获一个注释,而不是全部一起。
答案 0 :(得分:2)
您的问题不是awk
部分,而是for
部分。当你这样做
for x in yes no maybe why not
do
echo x
done
你会得到
yes
no
maybe
why
not
也就是说,for
循环的列表会自动以空格分隔。
我认为,一个解决方法是将注释用引号括起来;然后for
会将每个引用的评论视为单个项目。 legoscia的修复(在while循环中使用read
)对我来说似乎更好。
答案 1 :(得分:2)
这是因为for x in $result
会遍历$result
中的每个字 - 这就是for
的目的。
请改为尝试:
echo "$result" | while read x; do
echo "$x"
done
read
一次只能占一行,这就是你需要的。