Estoy leyendo el tutorial de Shell hoy en http://www.tutorialspoint.com/unix/unix-quoting-mechanisms.htm
En el que menciona:
Si aparece una comilla simple dentro de una cadena que se va a generar, no debe colocar la cadena completa entre comillas simples, sino que debe preceder eso usando una barra diagonal inversa () de la siguiente manera:
echo 'It\'s Shell Programming'
Probé esto en mi servidor centos, no funciona, me >
pide que me escriba más.
Me preguntaba, ya que dos comillas simples transforman todos los caracteres especiales en caracteres normales, que incluyen el símbolo de escape \
, pero se excluyen '
,
¿cómo debo representar una comilla simple '
en una frase entre comillas simples?
echo It\'s Shell Programming
oecho "It's Shell Programming"
?echo Wow, I'm going to have lots of $$$$$$ now
$
también. Algo comoecho Wow, I\'m going to have lots of \$\$\$\$\$\$ now
o soloecho Wow, I\'m going to have lots of '$$$$$$' now
echo 'It'"'"'s Shell Programming'
. Simplemente lo divido en 3 cadenas, la primera y la última rodeadas de comillas simples, pero la del medio tiene una comilla simple rodeada de comillas dobles.Respuestas:
El tutorial está mal.
POSIX dice:
Aquí hay algunas alternativas:
Lectura adicional: Citas - Greg's Wiki
fuente
echo 'It''s Shell Programming'
- zsh conrc_quotes
conjunto de opciones (y el shell rc también) - un par de comillas simples dentro de comillas simples representa una comilla simple.q="'"
yqq='"'
para hacer este limpiador. Esto luego permiteecho "It${q}s ${qq}Shell Programming${qq}"
(se necesitan llaves para las letras finales). POSIX seguro. La capa externa debe estar entre comillas dobles.Puedes usar:
Para cotizar con seguridad una línea de valor por línea.
Dependiendo de Shell, también puede tener la opción de hacer:
Aunque generalmente prefiero hacer:
Un enfoque más manual podría verse así:
... que es, al menos, sin tenedor.
fuente
printf %q\\n "$arbitrary_value"
, otros son demasiado complicados.En caso de que alguien más aparezca para poner una combinación de comillas simples y dobles en un archivo, esto también funciona:
Sin embargo, todo lo que el shell puede ver como una variable debe ser escapado por una barra invertida:
fuente