私はしばしば次の構文を見る:
awk 'stuff' <file
sort <file
問題は私が普通こう書くということです。
awk 'stuff' file
sort file
仕事がうまくいっています。もしそうなら、2つの構文がほぼ同じである場合(または同じですか?)<file
構文を使用すると、どのような利点がありますか?
編集する
私の質問のいくつかをカバーする既存のスレッドがあります(<
シェルを使用してファイルを開く最初そしてそれからコマンドの標準入力として渡す)、一部はまだ残っているようです。
- POSIX準拠?
file
議論の性格に対する曖昧さを排除するためですか?- 特定の種類のシェルに固有のものですか?
- 廃止とみなされますか?
- パフォーマンスの面で大きな違いはありますか?
- 1つを他のものと比較して使用するすべての例を歓迎します。
答え1
コマンドが標準入力(forms command <file
)または引数リストの名前付きファイルからの読み取りをサポートしている場合、両方が機能します。tcsh
サポートされるので、command <file
構文はかなり移植可能です。指定されたコマンドが引数リスト(または標準入力)のファイルを読み取ることができるかどうかは、コマンドによって異なります。ed(1)
たとえば、標準入力から読み取るコマンドは、標準入力からファイルを読み取ることができません。
Cレベルでは、標準入力または名前付きファイルから読み取るコマンドも同様の操作を実行します。
#include <err.h>
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
FILE *fhandle;
// option processing here ...
if (argc == 0 || strncmp(*argv, "-", (size_t) 2) == 0) {
fhandle = stdin;
} else {
if ((fhandle = fopen(*argv, "r")) == NULL)
err(1, "could not open '%s'", *argv);
}
// read from fhandle here, which is either from stdin or a file ...
}
一部のコマンドはcommand -
標準入力からフォームコマンドを読み取る必要があり、他のコマンドは引数リストが空の場合(上記のコードのように)自動的にそれを実行します。そうでなければ、どちらの場合もコードはそれを処理し、入力がfhandle
どこから来たのか気にしません(エラーメッセージにファイル名を含める必要がありますが、追加変数に挿入できる場合を除く)。