Puoi:
- Sfuggi a ogni singolo simbolo speciale con una barra rovesciata (come in
\[abc\]_\[x\|y\]
) o - Riporta tra virgolette l'intero argomento (come in
"[abc]_[x|y]"
).
MODIFICA: Come alcuni hanno sottolineato, le doppie virgolette non impediscono l'espansione delle variabili né la sostituzione dei comandi. Pertanto, se la tua regex contiene qualcosa che può essere interpretato da bash come uno di quelli, usa invece le virgolette singole.
Usa le virgolette singole. Le virgolette singole assicurano che nessuno dei caratteri venga interpretato.
$ printf %s 'spaces are not interpreted away
neither are new lines
nor variable names $TESTING
nor square brackets [TESTING]
nor pipe characters or redirection symbols | > <
nor the semicolon ;
nor backslashes \a \b \c \\
the only thing that does not work is the single quote itself
'
Ci sono due soluzioni se hai bisogno di incorporare una singola citazione:
$ printf '%s\n' '[ Don'"'"'t worry, be happy! ]'
[ Don't worry, be happy! ]
$ printf '%s\n' '[ Don'\''t worry, be happy! ]'
[ Don't worry, be happy! ]
Ogni man bash
Esistono tre meccanismi di citazione:il carattere di escape , virgolette singole e virgolette doppie.
Una barra rovesciata non quotata (\ ) è il carattere di escape . Conserva il valore letterale del carattere successivo che segue, ad eccezione di
. Se un \ Appare la coppia e la barra rovesciata non è essa stessa tra virgolette, il \ viene trattato come una continuazione di riga (ovvero, viene rimosso dall'inputstream ed effettivamente ignorato). Racchiudere i caratteri tra virgolette singole conserva il valore letterale di ciascun carattere all'interno delle virgolette. Un apice singolo potrebbe non trovarsi tra apici singoli, anche se preceduto da una barra rovesciata.
Racchiudere i caratteri tra virgolette preserva il valore letterale di tutti i caratteri tra virgolette, ad eccezione di $ , ` , \ e, quando l'espansione della cronologia è abilitata, ! . I caratteri $ e ` mantengono il loro significato speciale tra virgolette doppie. La barra rovesciata conserva il suo significato speciale solo se seguita da uno dei seguenti caratteri:$ , ` , " ,\ o
. Una doppia virgoletta può essere citata tra virgolette facendola precedere da una barra rovesciata. Se abilitata, verrà eseguita l'espansione della cronologia a meno che non venga visualizzato un ! che appare tra virgolette doppie viene sfuggito usando una barra rovesciata. La barra rovesciata che precede ! non viene rimosso. I parametri speciali * e @ hanno un significato speciale tra virgolette (vedi PARAMETRI sotto).
Parole della forma $' stringa ' sono trattati in modo speciale. La parola si espande in stringa , con caratteri di escape barra rovesciata sostituiti come specificato dallo standard ANSI C. Le sequenze di escape della barra rovesciata, se presenti, vengono 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 \' single quote \" double quote \nnn the eight-bit character whose value is the octal value nnn (one to three digits) \xHH the eight-bit character whose value is the hexadecimal value HH (one or two hex digits) \uHHHH the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value HHHH (one to four hex digits) \UHHHHHHHH the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value HHHHHHHH (one to eight hex digits) \cx a control-x characterIl risultato espanso è quotato singolo, come se il simbolo del dollaro non fosse stato presente.
Una stringa tra doppi apici preceduta dal simbolo del dollaro ($" stringa " ) causerà la traduzione della stringa in base alla locale corrente. Se la lingua corrente è C o POSIX , il simbolo del dollaro viene ignorato. Se la stringa viene tradotta e sostituita, la sostituzione è tra virgolette doppie.