命令在命令行中运行但不通过脚本运行

时间:2012-07-06 14:33:51

标签: bash shell awk

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时, 我得到预期的结果。 我把它放在循环中因为我需要一次捕获一个注释,而不是全部一起。

2 个答案:

答案 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一次只能占一行,这就是你需要的。