2011-11-24 15 views
38

Voglio visualizzare una stringa in Bash come questoCome sfuggire a una singola virgoletta in una stringa a virgoletta singola in Bash?

I'm a student 

Naturalmente si può fare in questo modo

echo "I'm a student" 

Ma come per raggiungere questo obiettivo durante l'utilizzo di un'unica citazione attorno alla stringa?

+4

Siamo spiacenti, non v'è alcun modo per posizionare un singolo citazione tra virgolette singole. Vedi http://www.gnu.org/software/bash/manual/bashref.html#Special-Parameters nella sezione '3.1.2.2 Single Quotes' –

risposta

70
echo 'I\'m a student' 

non funziona. Ma le seguenti opere:

echo $'I\'m a student' 

Dalla pagina man di bash:

Una sola citazione non possono verificarsi tra virgolette singole, anche se preceduto da una barra rovesciata.
....
Parole del modulo $ 'stringa' sono trattati appositamente. La parola si espande in stringa, con caratteri backslash-escape sostituiti come specificati dallo standard ANSI C.

+3

Una forma più brutta è:" I "" "" 'ma studente' –

+32

Perché, bash, * whyyyy *? –

+2

'echo $ 'Io sono uno studente!' = =' '! – regilero

33

La "brutta" soluzione menzionata da Glenn Jackman dovrebbe essere elencata come una risposta di primo livello. Funziona bene ed è davvero bello in alcune situazioni.

'I'"'"'m a student' 

Questo termina la stringa di singolo citato dopo I poi inizia subito una stringa tra virgolette doppio che contiene un apostrofo e poi inizia un altro singolo stringa tra apici. Bash quindi concatena tutte le stringhe contigue in una sola.

Bello!

+18

Penso che le nostre definizioni di bellezza differiscano in qualche modo ..;) –

0

Il seguente esempio funziona perché l'apice singolo sfuggito \' è tecnicamente tra i due argomenti singoli apici

echo 'I'\''m a student' 
Problemi correlati