## For background:
a number 1 = standard out (i.e. STDOUT)
a number 2 = standard error (i.e. STDERR)
if a number isn't explicitly given, then number 1 is assumed by the shell (bash)
First let's tackle the function of these. For reference see the [Advanced Bash-Scripting Guide](http://www.tldp.org/LDP/abs/html/io-redirection.html).
## Functions
### `2>&-`
The general form of this one is `M>&-`, where "M" is a file descriptor number. This will close output for whichever file descriptor is referenced, i.e. "M".
### `2>/dev/null`
The general form of this one is `M>/dev/null`, where "M" is a file descriptor number. This will redirect the file descriptor, "M", to `/dev/null`.
### `2>&1`
The general form of this one is `M>&N`, where "M" & "N" are file descriptor numbers. It combines the output of file descriptors "M" and "N" into a single stream.
### `|&`
This is just an abbreviation for `2>&1 |`. It was added in Bash 4.
### `&>/dev/null`
This is just an abbreviation for `>/dev/null 2>&1`. It redirects file descriptor 2 (STDERR) and descriptor 1 (STDOUT) to `/dev/null`.
### `>/dev/null`
This is just an abbreviation for `1>/dev/null`. It redirects file descriptor 1 (STDOUT) to `/dev/null`.
Portability to non-bash, tcsh, mksh, etc.
I've not dealt much with other shells outside of csh and tcsh. My experience with those 2 compared to bash's redirection operators, is that bash is superior in that regard. See the [tcsh man page](http://linux.die.net/man/1/tcsh) for more details.