Escape backquote en una cadena entre comillas dobles en shell
quotes quoting (3)
Necesitas escapar de la comilla invertida, pero también escapar de la barra invertida:
$ touch 1/` $ /bin/sh -c "ls 1///`" 1`
La razón por la que tiene que escapar "dos veces" es porque está ingresando este comando en un entorno (como un script de shell) que interpreta la cadena entre comillas dobles una vez. Luego es interpretado de nuevo por la subshell.
También podría evitar las comillas dobles, y así evitar la primera interpretación:
$ /bin/sh -c ''ls 1/`'' 1`
Otra forma es almacenar el nombre de archivo en una variable y usar ese valor:
$ export F=''1`'' $ printenv F 1` $ /bin/sh -c ''ls $F'' # note that /bin/sh interprets $F, not my current shell 1`
Y finalmente, lo que probaste funcionará en algunos shells (estoy usando bash, como en los ejemplos anteriores), aparentemente no con tu shell:
$ /bin/sh -c "ls 1''/`''" 1` $ csh # enter csh, the next line is executed in that environment % /bin/sh -c "ls 1''/`''" Unmatched `.
Le sugiero encarecidamente que evite dichos nombres de archivos en primer lugar .
Para el comando: / usr / bin / sh -c "ls 1`" (una cita posterior después de 1).
¿Cómo hacer que funcione con éxito? Agregar una barra invertida antes de "` "no funciona. `es un carácter especial como sabemos, y también intenté rodearlo con comillas simples (/ usr / bin / sh -c" ls 1''` ''"), pero tampoco funciona.
El error siempre son:
% /usr/bin/sh -c "ls 1/`"
Unmatched `
Utilice comillas simples en su lugar:
/usr/bin/sh -c ''ls 1/`''
/usr/bin/sh -c "ls ''1/`''"