Usar "

Usar "

Regularmente, he visto la siguiente sintaxis:

awk 'stuff' <file
sort <file

El caso es que suelo escribir:

awk 'stuff' file
sort file

Y las cosas funcionan perfectamente. Entonces, si ambas sintaxis son aproximadamente equivalentes (¿o lo son?), ¿hay algún beneficio al usar <filela sintaxis?

EDITAR

Los hilos existentes cubren algunas de mis interrogaciones (usar <implica que el shell abre el archivoprimeroyentonceslo pasa como entrada estándar al comando), pero siento que quedan algunos:

  • ¿Cumplimiento con POSIX?
  • ¿Es para disipar cualquier ambigüedad relativa a la naturaleza del fileargumento?
  • ¿Es específico de un determinado tipo de caparazón?
  • ¿Se considera obsoleto?
  • En cuanto al rendimiento, ¿hay alguna diferencia notable?
  • Cualquier ejemplo en el que se utilice uno contra el otro es bienvenido.

Respuesta1

Cualquiera de los dos funcionará si el comando admite la lectura desde la entrada estándar (el command <fileformulario) o desde un archivo con nombre en la lista de argumentos. Incluso tcshadmite command <fileque la sintaxis sea bastante portátil; si un comando determinado puede leer un archivo en la lista de argumentos (o entrada estándar) depende del comando; ed(1)por ejemplo, lee comandos de la entrada estándar, por lo que no puede leer un archivo desde la entrada estándar.

En el nivel C, un comando que lee desde una entrada estándar o un archivo con nombre hará algo como

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

Algunos comandos exigen que el command -formulario indique una lectura de la entrada estándar, otros lo harán automáticamente (como en el código anterior) cuando la lista de argumentos esté vacía. De lo contrario, el código en cualquier caso tratará con fhandle, y no le importa de dónde proviene la entrada (a menos que un mensaje de error deba incluir el nombre del archivo, pero eso puede incluirse en una variable adicional).

información relacionada