「&>」と「>&」の違い

「&>」と「>&」の違い

文書によると:

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 &> 1echoabcd21

おすすめ記事