|&provides a zsh-only shortcut for merging STDOUT and STDERR when piping. It is the same as
2>&1 |, just a lot shorter to type. I find this useful for commands that feel like dumping --help output to STDERR.
command --help |& less
Pro Tip: Don't confuse this with
&| which backgrounds the final command of the pipeline.
Find out more in the "Simple commands & pipelines" section of zshmisc:
A pipeline is either a simple command, or a sequence of two or more simple commands where each command is separated from the next by `|' or `|&'. Where commands are separated by `|', the standard output of the first command is connected to the standard input of the next. `|&' is shorthand for `2>&1 |', which connects both the standard output and the standard error of the command to the standard input of the next.
|&is borrowed from csh. I don't know if it originated in csh or prior.
The standard error output may be directed through a pipe with the standard output. Simply use the form |& instead of just |.
-- man csh(1)