Ho problemi con l'escape dei personaggi in bash. Vorrei evitare le virgolette singole e doppie durante l'esecuzione di un comando con un utente diverso. Ai fini di questa domanda, diciamo che voglio fare eco a quanto segue sullo schermo:
'single quote phrase' "double quote phrase"
Come posso sfuggire a tutti i caratteri speciali, se devo anche passare a un altro utente:
sudo su USER -c "echo "'single quote phrase' "double quote phrase"""
Naturalmente, questo non produce il risultato giusto.
Risposta accettata:
Puoi utilizzare la seguente sintassi letterale di stringa:
> echo $''single quote phrase' "double quote phrase"'
'single quote phrase' "double quote phrase"
Da man bash
Le parole della forma $'stringa' sono trattate in modo speciale. La parola si espande
in una stringa, con i caratteri con caratteri di escape barra rovesciata sostituiti come specificato da
lo
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)
cx a control-x character