Punctuation characters in Debian packages, versions, dependencies, etc.

Debian's systems for handling packages and their metadata use a variety of punctuation characters. This page is an attempt to list the uses and meanings. The list is roughly sorted from least to most obscure.

Character

Use in Debian packaging

Other important uses

+ .

Literal in package names and version numbers. Introduces type/extension(s) in filenames. + in apt command lines mean adding a package

-

Literal in package names, architectures, suite names and RFC822 field names. Last - separates the Debian revision in version numbers. In filename extensions, used to introduce sub-tarball-name for orig tarballs. In apt command line means removing/not-installing a package.

,

List separator (notably, in Dependency fields)

_

Separates components in (semi-)parseable filenames and buildd/wanna-build. In debconf templates, as the first character of a field name, indicates that the value is translatable. In git tags of debian versions, substituted in place of ~ (and also in place of : by some tools).

:

Delimits epoch (at start of version numbers; but not found in filenames). Introduces architecture (after package names). Field name terminator in RFC822 syntax files. Scoping literal in substvar names

ssh, make, etc.

~

Literal in version numbers, with unusual early sorting

( )

Contains version specification (in dependency fields)

shell, make

< >

Version number inequalities (as part of <= << etc. inside ( ) in dependency fields). Contains build profile specification (in dependency fields).

shell, email

=

Version number equality (in dependency fields inside ( ), and following package name on apt command line)

!

Negation (in architecture and build profile lists)

shell history

*

Wildcard (in architecture specifications, but not permitted everywhere)

glob

$

${substvar} in debian/control and in debconf templates.

shell, make

[ ]

Contains applicable architectures (in dependency fields)

glob

/

In apt command line, a way to specify the target release

pathnames

@

Indicates "the same package" (in debian/tests/control)

email, ssh, make

^

Specifies that previous name was a task, not package, name (in apt-get and other libapt-pkg users)

some shells

#

Comment introduction (starts of lines)

|

Alternative separator (notably, in Dependency fields)

shell

%

In git tags of debian versions, substituted in place of : (by most tools)

make

{ }

shell

;

shell

?

glob

&

shell

" ' `

shell, C, etc.

\

shell, C, make, etc.

Other than as noted above, punctuation characters are not permitted in package names and version numbers.