Eu não entendo como o bash avalia a fuga de caracteres de apóstrofo em seqüências de caracteres entre aspas simples.
Aqui está um exemplo:
$ echo ''\''Hello World'\'''
'Hello World' # works
$ echo '\'Hello World\''
> # expects you to continue input
Tentei procurar explicações para isso, mas não consegui nada. O que o bash está fazendo aqui?
echo \''Hello World'\'
Respostas:
Em aspas simples, não é possível escapar. Não há como incluir uma aspas simples em aspas simples. Veja Citando em man bash .
fonte
echo '\''
echo $'\'hello world\''
Além das aspas simples e dupla suportadas pelo POSIX,
bash
fornece um tipo adicional de aspas para permitir uma pequena classe de caracteres de escape (incluindo uma aspas simples) em uma sequência de caracteres citada:Veja a seção de CITAÇÕES na
bash
página de manual, perto do final da seção. (Procure por "ANSI C".)fonte
Para explicar o que está acontecendo com seus apóstrofes escapados, examinaremos seu segundo exemplo (também veja aspas simples ou fortes ):
Aqui, você deixou a cotação suspensa, como declarou. Agora apare o final e mude para:
A sub-string "Hello World" não foi citada aqui, mas se comportou como se fosse forte. Usando seu exemplo novamente, apare o final de maneira diferente desta vez:
A sub-string "Hello World" se comporta novamente como se fosse uma citação forte, com apenas o apóstrofo adicionado (escapou, portanto não é mais uma citação) no final.
Quando outra aspas simples é adicionada ao final (seu exemplo original), a sequência é deixada suspensa e aguardando uma cotação fechada.
fonte
Exemplo simples de escape de aspas no shell:
Isso é feito fechando um já aberto (
'
), colocando um escapado (\'
) para imprimir e abrindo outro ('
).Alternativamente:
Isso é feito finalizando já aberto um (
'
), colocando aspas em outro aspas ("'"
) e abrindo outro ('
).O que você fez (
'\'Hello World\''
) é:'
.\'
, assim que a corda torna-se:'\'
.Hello World
não é aspas.\'
) sem abri-lo.'
) está abrindo a string, mas não há um fechamento esperado.Portanto, o exemplo correto seria:
Relacionado: Como escapar de aspas simples em strings de aspas simples?
fonte