Il existe trois mécanismes de citation : le caractère d'échappement, les guillemets simples et les guillemets doubles.
Un anti-slash non cité (\) est le caractère d'échappement. Il préserve la valeur littérale du caractère suivant, à l'exception du . Si une paire \ apparaît et que l'anti-slash n'est pas lui-même cité, le \ est traité comme une continuation de ligne (c'est-à-dire qu'il est supprimé du flux d'entrée et effectivement ignoré).
Entourer les caractères de guillemets simples préserve la valeur littérale de chaque caractère entre les guillemets. Un guillemet simple ne peut pas apparaître entre des guillemets simples, même lorsqu'il est précédé d'un anti-slash.
Entourer les caractères de guillemets doubles préserve la valeur littérale de tous les caractères entre les guillemets, à l'exception de $, `, \ et, lorsque l'expansion de l'historique est activée, !. Les caractères $ et ` conservent leur signification spéciale entre guillemets doubles. L'anti-slash conserve sa signification spéciale uniquement s'il est suivi de l'un des caractères suivants : $, `, ", \ ou . Un guillemet double peut être cité entre des guillemets doubles en le précédant d'un anti-slash. Si l'expansion de l'historique est activée, elle sera effectuée sauf si un ! apparaissant entre guillemets doubles est échappé avec un anti-slash. L'anti-slash précédant le ! n'est pas supprimé.
Les paramètres spéciaux * et @ ont une signification spéciale entre guillemets doubles (voir PARAMÈTRES ci-dessous).
Les mots de forme $'chaîne' sont traités spécialement. Le mot se développe en chaîne, les caractères échappés par un anti-slash étant remplacés comme spécifié par la norme ANSI C. Les séquences d'échappement par anti-slash, si elles sont présentes, sont décodées comme suit :
**\\a** alerte (cloche)
**\\b** retour en arrière
**\\e**
**\\E** un caractère d'échappement
**\\f** saut de page
**\\n** nouvelle ligne
**\\r** retour chariot
**\\t** tabulation horizontale
**\\v** tabulation verticale
**\\\\** anti-slash
**\\'** guillemet simple
**\\"** guillemet double
**\\**_nnn_ le caractère octet dont la valeur est la valeur octale _nnn_
(un à trois chiffres)
**\\x**_HH_ le caractère octet dont la valeur est la valeur hexadécimale _HH_
(un ou deux chiffres hexadécimaux)
**\\u**_HHHH_ le caractère Unicode (ISO/IEC 10646) dont la valeur est
la valeur hexadécimale _HHHH_ (un à quatre chiffres hexadécimaux)
**\\U**_HHHHHHHH_
le caractère Unicode (ISO/IEC 10646) dont la valeur est
la valeur hexadécimale _HHHHHHHH_ (un à huit chiffres hexadécimaux)
**\\c**_x_ un caractère de contrôle-_x_
Le résultat étendu est entre guillemets simples, comme si le signe dollar n'avait pas été présent.
Une chaîne entre guillemets doubles précédée d'un signe dollar ($"chaîne") provoquera la traduction de la chaîne selon la locale actuelle. Si la locale actuelle est C ou POSIX, le signe dollar est ignoré. Si la chaîne est traduite et remplacée, le remplacement est entre guillemets doubles.