簡體   English   中英

在awk中轉義shell重定向字符

[英]escape shell redirection characters in awk

有人有一個“聰明”的想法,那就是您應該可以在任何地方使用輸出重定向。

這意味着這兩個是等效的:

# 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

但是又為什么呢?

這與bash無關。 awk不執行bash代碼,因此print ... > file是純awk命令,因此適用不同的轉義規則。

沒有相應的輸入重定向運算符,因此將print $1 < 10簡單地解析為打印比較$1 < 10的結果的命令。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM