101

For example

echo "aaa" |& cat

What does |& mean here?

Is there a website recommended to look up those? Since most search engines can't support searching special characters.

1
  • 1
    FYI: echo "aaa" |& cat may lead to -bash: syntax error near unexpected token `&' if bash --version is GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin14).
    – pmor
    Commented Feb 17, 2022 at 23:34

4 Answers 4

97

From man 1 bash, section Pipelines:

[time [-p]] [ ! ] command [ [|⎪|&] command2 ... ]

If |& is used, command's standard error, in addition to its standard output, is connected to command2's standard input through the pipe

So it is just like the pipe operator |, but piping both standard output and standard error.

2
  • 3
    @BallpointBen exactly. From gnu.org/software/bash/manual/bash.pdf: If ‘|&’ is used, command1’s standard error, in addition to its standard output, is connected to command2’s standard input through the pipe; it is shorthand for 2>&1 |.
    – SantaXL
    Commented Nov 18, 2019 at 16:22
  • 2
    @SantaXL It's worth noting that |& isn't widely supported and you are better off using 2>&1 | for greater shell support across different platforms and different Linux distributions. Commented Jun 29, 2023 at 1:20
20

This operator pipes both standard output and standard error from the left hand side to the right hand side.

The Bash reference manual has a comprehensive index of all operators where you can look up these operators.

7

If |& is used,

command_1’s standard error, in addition to it's standard output, is connected to command_2’s standard input through the pipe;

it is shorthand for 2>&1 |.

This implicit redirection of the standard error to the standard output is performed after any redirections specified by the command.

3

command1 |& command2 equal command1 2>&1 | command2

Not the answer you're looking for? Browse other questions tagged or ask your own question.