別の例を見てみましょう。 最初のコマンド (ls) は有効なコマンドですが、2 番目のコマンド (ls -0) は不正なオプション -0 が含まれているため無効なコマンドです。
これは有効なコマンドです:
$ ls
Applications Documents Library Music Public$ echo $?
0
次に、無効なコマンドを見てみます:
$ ls -0
ls: illegal option -- 0
usage: ls $ echo $?
1
このスクリプトで問題となるのは、エラー メッセージが STDERR へ表示されてしまうということです。 しかし、私たちのスクリプトでは、エラーメッセージを表示しないようにしたいのです。 
> /dev/null 2>&1 でもう一度試してみましょう:
$ ls -0 > /dev/null 2>&1
$ echo $?
1
 今度はエラーメッセージが表示されないことに注意してください。 これを分解すると、ls -0 コマンドのエラー出力 (stderr) を抑制し、標準出力 (stdout) にリダイレクトし、/dev/null に書き込んで、すぐに破棄しているのです。 >&記号は、最初のファイルディスクリプタ(2)の出力をコピーして、2番目のファイルディスクリプタ(1)の出力にリダイレクトする演算子です。
さて、このファイルディスクリプタの表を見て、2>&1の数字が何を表しているかを見ていきましょう。

  
 /dev/nullではなく通常のファイルへの出力で確認できます.
$ ls -0 > /tmp/devnull 2>&1
$ echo $?
1$ cat /tmp/devnull
ls: illegal option -- 0
usage: ls