Skip to content

Flat command syntax

This is the syntax used in input.conf, and referred to "input.conf syntax" in a number of other places.

<command> ::= [<prefixes>] <command_name> (<argument>)*
<argument> ::= (<unquoted> | " <double_quoted> " | ' <single_quoted> ' | `X <custom_quoted> X`)

command_name is an unquoted string with the command name itself. See List of Input Commands for a list.

Arguments are separated by whitespaces even if the command expects only one argument. Arguments with whitespaces or other special characters must be quoted, or the command cannot be parsed correctly.

Double quotes interpret JSON/C-style escaping, like \t or \" or \\. JSON escapes according to RFC 8259, minus surrogate pair escapes. This is the only form which allows newlines at the value - as \n.

Single quotes take the content literally, and cannot include the single-quote character at the value.

Custom quotes also take the content literally, but are more flexible than single quotes. They start with <span class="title-ref"> (back-quote) followed by any ASCII character, and end at the first occurrence of the same pair in reverse order, e.g. </span>`-foo-`<span class="title-ref"> or </span> bar ```. The final pair sequence is not allowed at the value - in these examples-and respectively. In the second example the last character of the value also can't be a back-quote.

Mixed quoting at the same argument, like 'foo'"bar", is not supported.

Note that argument parsing and property expansion happen at different stages. First, arguments are determined as described above, and then, where applicable, properties are expanded - regardless of argument quoting. However, expansion can still be prevented with the raw prefix or $>. See Input Command Prefixes and Property Expansion.