从此得到模因,但是当我评论时没有人回答(也用谷歌搜索但没有找到)
答案1
rm /tmp/output 2>/dev/null || :
grep nobody /etc/passwd | sed -e 's/:.*//' >>/tmp/output
grep nobody /etc/passwd |>>/tmp/output sed -e 's/:.*//'
cat /tmp/output # should be two "nobody" lines
这两个grep …|sed …
管道完全相同,表明这|>>
对于 *nix shell 来说并不特殊,只是|
(pipe) 和>>
(append-to file) 运算符连接在一起。重定向可以放置在命令中的任何位置。
答案2
如前所述,这些是等效的
echo foo |>> file rev
echo foo | rev >> file
但>
重定向有点不同:如果您使用set -o noclobber
它来防止意外截断文件
$ rm file
$ echo foo |>> file rev
$ cat file
oof
$ echo bar |> file rev
bash: file: cannot overwrite existing file
$ cat file
oof
在这种情况下,您可以>|
故意覆盖该文件,从而导致这个迷人的命令
$ echo bar |>| file rev
$ cat file
rab