bash - echo que shell escapa argumentos
arguments escaping (1)
Esta pregunta ya tiene una respuesta aquí:
- Comando para escapar de una cadena en bash 3 respuestas
¿Existe un comando que no solo elimine su argumento sino que también los escape si es necesario (por ejemplo, si un argumento contiene espacios en blanco o un carácter especial)?
Lo necesitaría en alguna magia de shell donde, en lugar de ejecutar un comando en un script, repito el comando. Esta salida se canaliza a un script de python que finalmente ejecuta los comandos de una manera más eficiente (carga el método main () del script de python de destino real y lo ejecuta con los argumentos dados y un parámetro adicional por el cual los datos calculados se almacenan en caché entre corre de main ()).
Por supuesto, en lugar de eso, podría trasladar toda la magia de shell a Python, donde no necesitaría canalizar nada.
Con bash, el componente printf
builtin tiene un especificador de formato adicional %q
, que imprime el argumento correspondiente de una forma sencilla:
Además de los formatos estándar de printf (1),
%b
hace que printf expanda las secuencias de escape de barra invertida en el argumento correspondiente (excepto que/c
termina la salida, las barras diagonales inversas en/'
,/"
y/?
No se eliminan, y los escapes octales comenzando con/0
puede contener hasta cuatro dígitos), y%q
hace que printf genere el argumento correspondiente en un formato que se puede reutilizar como entrada de shell.
Así que puedes hacer algo como esto:
printf %q "$VARIABLE"
printf %q "$(my_command)"
para obtener el contenido de una variable o la salida de un comando en un formato que sea seguro pasar como entrada nuevamente (es decir, espacios escapados). Por ejemplo:
$ printf "%q/n" "foo bar"
foo/ bar
(Agregué una nueva línea solo para que sea bonita en un shell interactivo).