Estoy intentando sustituir una variable de cadena, que contiene varias palabras entrecomilladas, como un parámetro de un comando.¿Cómo sustituir las cadenas de palabras múltiples citadas como argumentos?
Por lo tanto, dado el siguiente script de ejemplo (Nota del -x en el tinglado, lo que provoca que la salida se registra en stderr),
#!/bin/bash -x
myArg="\"hello\" \"world\""
echo "string is:" $myArg
exit
Lo que nos da,
+ myArg='"hello" "world"'
+ echo 'string is:' '"hello"' '"world"'
string is: "hello" "world"
+ exit
La línea dos muestra lo que realmente se pasa al comando; bash ha agregado comillas simples a cada palabra en la cadena. Si en su lugar, por lo tanto, cito "$ myArg", ocurre lo mismo, pero para toda la cadena en lugar de cada palabra.
Imaginemos que en lugar de echo
, estamos pasando la cadena a un programa donde algunos de los argumentos necesitan ser patrones citados, como "*"
(que no debe ser expandido por el shell).
Para aclarar, no quiero que se agreguen las comillas simples durante la expansión. ¿Cómo podría lograr esto?
¿Qué estás haciendo?A menos que estés haciendo algo asqueroso con 'eval' si la cadena que se pasa al programa contiene' "*" 'o' * 'no debería importar mucho. – Sorpigal
Para cualquiera que esté confundido: tenga en cuenta que '-x' en el shebang hace que la salida se registre. – user123444555621
@ Pumbaa80, de hecho, he agregado esa aclaración a la pregunta. –