Ci sono tre meccanismi di citazione: il carattere escape, gli apici singoli e gli apici doppi.
Un backslash non quotato ( ** ) è il carattere di escape. Conserva il valore letterale del prossimo carattere che segue, con l'eccezione di <newline>. Se appare una coppia ** <newline>, e il backslash non è quotato, il ** <newline> è trattato come una continuazione di linea (cioè, è rimosso dal flusso di input ed effettivamente ignorato).
Racchiudere i caratteri tra apici singoli conserva il valore letterale di ogni carattere all'interno degli apici. Un apice singolo non può trovarsi tra apici singoli, anche se preceduto da un backslash.
Chiudere i caratteri tra virgolette doppie conserva il valore letterale di tutti i caratteri all'interno delle virgolette, con l'eccezione di $ , ` , ** , and, when history expansion is enabled, **!. The characters $ and ` mantengono il loro significato speciale all'interno delle virgolette doppie. Il backslash mantiene il suo significato speciale solo se seguito da uno dei seguenti caratteri: $ , ` , “ , ** , o **<newline>. Un doppio apice può essere citato all'interno di doppi apici precedendolo con un backslash. Se abilitato, l'espansione della cronologia verrà eseguita a meno che un ! che appare tra virgolette doppie sia evaso con una barra rovesciata. Il backslash che precede il ! non viene rimosso.
I parametri speciali * e @ hanno un significato speciale quando sono tra doppi apici (vedi PARAMETRI più avanti).
Le parole della forma $‘ string ’ sono trattate in modo speciale. La parola si espande a string, con i caratteri con escape backslash sostituiti come specificato dallo standard ANSI C. Le sequenze di escape backslash, se presenti, sono decodificate come segue:
**\a** alert (bell) **\b** backspace **\e**** \E **an escape character** \f **form feed** \n **new line** \r **carriage return** \t **horizontal tab** \v **vertical tab** \ **backslash**
Il risultato espanso è tra virgolette, come se il segno del dollaro non fosse stato presente.
Una stringa tra virgolette preceduta dal segno del dollaro ( **$"** _string_ **"** ) farà sì che la stringa venga tradotta secondo il locale corrente. Se il locale corrente è **C** o **POSIX** , il segno del dollaro viene ignorato. Se la stringa viene tradotta e sostituita, la sostituzione è a doppi apici. **single quote** \" **double quote** \**_nnn_ the eight-bit character whose value is the octal value _nnn_ (one to three digits)**\x**_HH_ the eight-bit character whose value is the hexadecimal value _HH_ (one or two hex digits)**\u**_HHHH_ the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value _HHHH_ (one to four hex digits)**\U**_HHHHHHHH_ the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value _HHHHHHHH_ (one to eight hex digits)**\c**_x_ a control-_x_ character
Il risultato espanso è tra virgolette, come se il segno del dollaro non fosse stato presente.
Una stringa tra virgolette preceduta dal segno del dollaro ( $” string “ ) farà sì che la stringa venga tradotta secondo il locale corrente. Se il locale corrente è C o POSIX , il segno del dollaro viene ignorato. Se la stringa viene tradotta e sostituita, la sostituzione è a doppi apici.