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)}'