supongamos que esta es la cadena:
'a',"b"
contiene comillas simples y dobles.
¿Cómo pasarías esto a un script bash como una sola cadena?
este es el script bash:
#!/bin/bash
echo $1
debe hacer eco
'a',"b"
pero no podemos asumir que la cuerda sea tan pequeña. en última instancia planeo enviar todo
/etc/httpd/conf/httpd.conf
como una cadena para este script bash.
así que realmente no puedo escapar de las comillas y las comillas simples una a la vez.
Respuesta1
Puedes usarsustitución de comando:
oo.sh "$(cat /etc/httpd/conf/httpd.conf)"
Esto se ejecutará cat /etc/httpd/conf/httpd.conf
y colocará la salida (el contenido del archivo) en el primer argumento dado a oo.sh
. Está entrecomillado, por lo que se pasa como un argumento único: los espacios y caracteres especiales se pasan intactos. oo.sh
obtiene un solo argumento.
Sin embargo, en términos más generales, podría ser mejor pasar el nombre del archivo al script si es posible, o proporcionar el contenido del archivo como entrada estándar ( oo.sh < /etc/httpd/conf/httpd.conf
). Además de ser más estándar, hay una longitud máxima que pueden tener todos los argumentos de la línea de comandos juntos, y un archivo puede ser más largo que eso. Incluso si funciona ahora, si ese archivo puede crecer con el tiempo, eventualmente pasarlo todo como argumento dejará de funcionar con un error "lista de argumentos demasiado larga".
Puedes encontrar ese límite con getconf ARG_MAX
. El tamaño varía dramáticamente: aquí tengo sistemas con límites de 2 MB y límites de 256 KB. Si su archivo siempre será pequeño, no necesita preocuparse; de lo contrario, debería probar otra forma de introducir los datos en el script.