Verwenden von "

Verwenden von "

Regelmäßig habe ich die folgende Syntax gesehen:

awk 'stuff' <file
sort <file

Die Sache ist, ich schreibe normalerweise:

awk 'stuff' file
sort file

Und alles funktioniert perfekt. Wenn also beide Syntaxen ungefähr gleichwertig sind (oder sind sie das?), bringt die Verwendung von <fileSyntax dann einen Vorteil?

BEARBEITEN

Einige meiner Fragen werden in vorhandenen Threads behandelt (die Verwendung <impliziert, dass die Shell die Datei öffnetErsteUndDannübergibt es als Standardeingabe an den Befehl), aber ich habe das Gefühl, dass einige übrig bleiben:

  • POSIX-Kompatibilität?
  • Sollen etwaige Unklarheiten hinsichtlich der Art des fileArguments beseitigt werden?
  • Ist es spezifisch für einen bestimmten Shell-Typ?
  • Gilt es als veraltet?
  • Gibt es hinsichtlich der Leistung einen nennenswerten Unterschied?
  • Jedes Beispiel, bei dem Sie das eine gegen das andere verwenden würden, ist willkommen.

Antwort1

Beides funktioniert, wenn der Befehl das Lesen von der Standardeingabe (dem command <fileFormular) oder aus einer benannten Datei in der Argumentliste unterstützt. tcshUnterstützt sogar command <filedas Lesen, sodass die Syntax relativ portierbar ist. Ob ein bestimmter Befehl eine Datei in der Argumentliste (oder der Standardeingabe) lesen kann, hängt vom Befehl ab. ed(1)Beispielsweise liest Befehle von der Standardeingabe, kann also keine Datei von der Standardeingabe lesen.

Auf der C-Ebene führt ein Befehl, der von der Standardeingabe oder einer benannten Datei liest, etwa Folgendes aus:

#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 ...
}

Einige Befehle erfordern die command -Form, um ein Lesen von der Standardeingabe anzuzeigen, andere tun dies automatisch (wie im oben genannten Code), wenn die Argumentliste leer ist. Andernfalls befasst sich der Code in beiden Fällen mit fhandleund kümmert sich nicht darum, woher die Eingabe kommt (es sei denn, eine Fehlermeldung muss den Dateinamen enthalten, aber das kann in eine zusätzliche Variable eingefügt werden).

verwandte Informationen