Bash awk中的转义shell重定向字符

Bash awk中的转义shell重定向字符,bash,shell,redirect,awk,escaping,Bash,Shell,Redirect,Awk,Escaping,有人有一个“聪明”的想法,即您应该能够在任何地方使用输出重定向 这意味着这两者是等效的: # 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 &g

有人有一个“聪明”的想法,即您应该能够在任何地方使用输出重定向

这意味着这两者是等效的:

# 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
#echo 5 | awk'{print 10<$1}'
0

但是,为什么呢?

这与
bash
无关
awk
不执行
bash
code,所以
print…>file
是一个纯的
awk
命令,因此应用不同的转义规则


没有相应的输入重定向操作符,因此,
print$1<10
被简单地解析为一个命令,用于打印比较结果
$1<10

。我终于找到了逃避它的方法:echo 5 | awk'{print($1>10)}'