Te traemos la solución a esta impedimento, o por lo menos eso creemos. Si continuas con inquietudes puedes escribirlo en el apartado de preguntas, que para nosotros será un placer ayudarte
Solución:
Para acceder a las variables, debe colocar un signo de dólar delante del nombre: $name
Sin embargo, las variables no se expanden dentro de cadenas encerradas entre ‘comillas simples’. Sin embargo, debe tenerlos envueltos entre “comillas dobles” para evitar la división de palabras del valor expandido, si puede contener espacios.
Entonces, básicamente hay dos formas, o bien ponemos todo el argumento entre comillas dobles para hacer que la variable se pueda expandir, pero luego tenemos que escapar de los caracteres de comillas dobles dentro, para que terminen en el parámetro real (línea de comando abreviada):
curl -d ""query":"$name", "turnOff":true" ...
Alternativamente, podemos concatenar string literales encerrados en diferentes tipos de comillas escribiéndolos inmediatamente uno al lado del otro:
curl -d '"query":"'"$name"'", "turnOff":true' ...
Dado que el valor de los rizos -d
el parámetro está entre comillas simples significa que no habrá expansión de parámetros, simplemente agregar la variable no funcionaría. Puede evitar esto finalizando el string literal, agregando la variable y luego iniciando el string literal de nuevo:
curl -d '"query":"'"$name"'", "turnOff":true' -H "Content-Type: application/json" -X POST http://localhost:8080/explorer
Las comillas dobles adicionales alrededor de la variable se utilizan para evitar la expansión de parámetros de shell no deseada.
La respuesta de @ByteCommander es buena, asumiendo sabes que el valor de name
es un JSON correctamente escapado string literal. Si no puede (o no quiere) hacer esa suposición, use una herramienta como jq
para generar el JSON para usted.
curl -d "$(jq -n --arg n "$name" 'query: $n, turnOff: true')"
-H "Content-Type: application/json" -X POST http://localhost:8080/explorer
Te invitamos a añadir valor a nuestra información añadiendo tu experiencia en las ilustraciones.