有人有“明亮”的想法,你应该可以在任何地方使用输出重定向。
这意味着这两个是等价的:
# echo expect > more friends
# cat more
expect friends
# rm more
# echo expect friends > more
# cat more
expect friends
# rm more
这不会那么糟糕,如果你可以逃脱它,事实上你可以:
# echo "expect > more friends"
expect > more friends
# echo 'expect > more friends'
expect > more friends
实际上,你甚至可以写出这样的东西,它会按预期工作:
# echo '{ print $1 > 10 }'
{ print $1 > 10 }
现在让我们尝试使用awk:
# echo 5 | awk '{ print $1 > 10 }'
# cat 10
5
# rm 10
当然。现在,如果有人能告诉我这有什么意义......
但是让我们尝试其他变种:
# echo 5 | awk "{ print $1 > 10 }"
# cat 10
5
# rm 10
# echo 5 | awk '{ print $1 \> 10 }'
awk: 1: unexpected character '\'
# echo 5 | awk '{ print $1 \\> 10 }'
awk: 1: unexpected character '\'
为什么要打击?为什么呢?
在任何情况下,都有一个解决方法,使用<而不是>完全应该做的事情:
# echo 5 | awk '{ print 10 < $1 }'
0
但是,为什么呢?
答案 0 :(得分:2)
这与bash
无关。 awk
不执行bash
代码,因此print ... > file
是纯awk
命令,因此适用不同的转义规则。
没有相应的输入重定向运算符,因此print $1 < 10
只是被解析为打印比较结果的命令$1 < 10
。