### 2.6 Specifying input files on the command line ¶

The remaining arguments on the command line are taken to be input file names. If no names are present, standard input is read. A file name of `-` is taken to mean standard input. It is conventional, but not required, for input files to end in ‘`.m4`’.

The input files are read in the sequence given. Standard input can be read more than once, so the file name `-` may appear multiple times on the command line; this makes a difference when input is from a terminal or other special file type. It is an error if an input file ends in the middle of argument collection, a comment, or a quoted string.

The options `--define` (`-D`), `--undefine` (`-U`), `--synclines` (`-s`), and `--trace` (`-t`) only take effect after processing input from any file names that occur earlier on the command line. For example, assume the file `foo` contains:

    $ cat foo
    bar

The text ‘`bar`’ can then be redefined over multiple uses of `foo`:

    $ m4 -Dbar=hello foo -Dbar=world foo
    ⇒hello
    ⇒world

If none of the input files invoked `m4exit` (see Exiting from `m4`), the exit status of `m4` will be 0 for success, 1 for general failure (such as problems with reading an input file), and 63 for version mismatch (see Using frozen files).

If you need to read a file whose name starts with a `-`, you can specify it as ‘`./-file`’, or use `--` to mark the end of options.