|&
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.
Update:
|&
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)