文書によると:
There are two formats for redirecting standard output and standard
error:
&>word
and
>&word
Of the two forms, the first is preferred. This is semantically equiva-
lent to
>word 2>&1
ただし、次のコマンドを実行すると、次のようになります。
echo abc 2>&1 | tee myfile
abcをインポートしてファイルにストリーミングします。
しかし、一緒に:
echo abcd 2&>1 | tee myfile
出力がなく、空の文字列がファイルに挿入されます。 >&と&>は同じでなければなりませんか?
ベストアンサー1
要約:シェルでは、bash
との間に違いはありませんが、表示されるコードのリダイレクトは異なります。>&
&>
最初のコードでは、2>&1
(「標準出力がある場所への標準エラーリダイレクト」)を使用します。
2&>1
>&
それからこれがifとare sameを使うのとなぜ違うのか尋ねます&>
。
bash
参考にした文書は具体的にリダイレクト演算子&>word
に関しては、>&word
これは標準リダイレクトと同じで>word 2>&1
あり、ドキュメントでもこれについて言及しています。ファイル記述子、ドキュメントに書かれていない内容、[n]&>word
または[n]>&word
他のリダイレクト演算子についての言及はありません(これら2つのリダイレクト演算子があるため、これが何を意味するのかは不明です)。すでに標準入力と標準エラーが暗黙的に含まれます。
2つのコマンドのうち2番目のコマンドであるusingは、これらの2&>1
リダイレクト演算子の1つを使用しており、ユーザーが思うように解釈しません。最初のコマンドは後に数字が続くため、echo abcd 2>&1
特別な非標準リダイレクトは使用しません。>&
マニュアルには次のように具体的に言及されています。
2番目の形式を使用している場合は、
word
数字または数字で拡張できない可能性があります-
。その場合、追加のリダイレクト演算子が適用されます(参照:ファイル記述子のコピー 下)互換性上の理由で。
2番目のコマンドは、「2つの引数を使用して呼び出し、stdoutとstderrをファイル名で作成します。」とecho abcd 2&>1
同じです。echo abcd 2 &> 1
echo
abcd
2
1