Estou lendo o tutorial do shell hoje em http://www.tutorialspoint.com/unix/unix-quoting-mechanisms.htm
Em que menciona:
Se uma aspas simples aparecer dentro de uma sequência a ser impressa, você não deve colocar a sequência inteira entre aspas simples, em vez disso, precederia o uso de uma barra invertida () da seguinte maneira:
echo 'It\'s Shell Programming'
Eu tentei isso no meu servidor centos, ele não funciona, um >
prompt para sugerir que eu digite mais.
Fiquei me perguntando, uma vez que duas aspas simples transformam todos os caracteres especiais em caracteres normais, que incluem símbolo de escape \
, mas se excluem, o '
,
como devo representar uma única aspas '
em uma frase de aspas simples?
echo It\'s Shell Programming
ouecho "It's Shell Programming"
?echo Wow, I'm going to have lots of $$$$$$ now
$
também. Algo comoecho Wow, I\'m going to have lots of \$\$\$\$\$\$ now
ou apenasecho Wow, I\'m going to have lots of '$$$$$$' now
echo 'It'"'"'s Shell Programming'
. Eu apenas o divido em três cadeias, a primeira e a última cercadas por aspas simples, mas a do meio tem uma aspas simples cercada por aspas duplas.Respostas:
O tutorial está errado.
O POSIX diz:
Aqui estão algumas alternativas:
Leitura adicional: Citações - Greg's Wiki
fonte
echo 'It''s Shell Programming'
- zsh com orc_quotes
conjunto de opções (e o shell rc também) - um par de aspas simples dentro de aspas simples representa uma única aspas simples.q="'"
eqq='"'
para fazer isso mais limpo. Isso então permiteecho "It${q}s ${qq}Shell Programming${qq}"
(colchetes são necessários devido às letras finais). Seguro para POSIX. A camada externa deve estar entre aspas duplas.Você pode usar:
Para fazer shell com segurança, cite uma linha de valor por linha.
Dependendo do shell, você também pode ter a opção de fazer:
Embora eu prefira fazer:
Uma abordagem mais manual pode se parecer com:
... que é, pelo menos, sem garfo.
fonte
printf %q\\n "$arbitrary_value"
, outros são muito complicados.Caso outra pessoa apareça para colocar uma mistura de aspas simples e duplas em um arquivo, isso também funcionará:
Tudo o que o shell pode ver como variável deve ser escapado por uma barra invertida:
fonte