escape variable in bash script curl request
up vote
-1
down vote
favorite
I am trying to curl via bash script but unable to pass the value of var1 in curl request and getting error upon execution ...
#!/bin/bash
var1="some test message"
curl 'https://link'
-H 'Content-Type: application/json'
-d '
{"msgtype": "text",
"text": {
"content": $var1
}
}'
linux bash shell curl
add a comment |
up vote
-1
down vote
favorite
I am trying to curl via bash script but unable to pass the value of var1 in curl request and getting error upon execution ...
#!/bin/bash
var1="some test message"
curl 'https://link'
-H 'Content-Type: application/json'
-d '
{"msgtype": "text",
"text": {
"content": $var1
}
}'
linux bash shell curl
add a comment |
up vote
-1
down vote
favorite
up vote
-1
down vote
favorite
I am trying to curl via bash script but unable to pass the value of var1 in curl request and getting error upon execution ...
#!/bin/bash
var1="some test message"
curl 'https://link'
-H 'Content-Type: application/json'
-d '
{"msgtype": "text",
"text": {
"content": $var1
}
}'
linux bash shell curl
I am trying to curl via bash script but unable to pass the value of var1 in curl request and getting error upon execution ...
#!/bin/bash
var1="some test message"
curl 'https://link'
-H 'Content-Type: application/json'
-d '
{"msgtype": "text",
"text": {
"content": $var1
}
}'
linux bash shell curl
linux bash shell curl
edited Nov 8 at 11:17
RavinderSingh13
23.6k41337
23.6k41337
asked Nov 8 at 11:16
tj59
64
64
add a comment |
add a comment |
3 Answers
3
active
oldest
votes
up vote
-1
down vote
accepted
Use below script.
https://aaa.com' -H 'Content-Type: application/json' -d '{"msgtype": "text", "text": { "content": '"'$var1'"' }}'
This produces invalid JSON that uses single quotes to quote the value of thecontent
key. Using parameter expansion to create JSON is not in general safe anyway.
– chepner
Nov 8 at 14:01
add a comment |
up vote
0
down vote
Your variable $var1
doesn't get expanded by the shell because it is inside single quote '
.
You need to use double quote to let bash do the parameter expansion, and escape your json data:
#!/bin/bash
var1="some test message"
curl 'https://link'
-H 'Content-Type: application/json'
-d "
{
"msgtype": "text",
"text": {
"content": "$var1"
}
}"
Or you can use inline document (without the escaping hell, but the command becomes awkward):
#!/bin/bash
var1="some test message"
curl 'https://link'
-H 'Content-Type: application/json'
-d "$(cat <<EOT
{
"msgtype": "text",
"text": {
"content": "$var1"
}
}
EOT
)"
add a comment |
up vote
0
down vote
In general, don't use parameter expansion to define JSON dynamically like this. There is no guarantee that your template, combined with the contents of the variable, produces well-formed JSON. (This is for the same reasons you don't use string interpolation to create dynamic SQL queries.) Use a tool like jq
instead.
curl 'https://link' ...
-d "$(jq --argjson x "$var"
-n '{msgtype: "text", text: {content: $x}}')"
add a comment |
3 Answers
3
active
oldest
votes
3 Answers
3
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
-1
down vote
accepted
Use below script.
https://aaa.com' -H 'Content-Type: application/json' -d '{"msgtype": "text", "text": { "content": '"'$var1'"' }}'
This produces invalid JSON that uses single quotes to quote the value of thecontent
key. Using parameter expansion to create JSON is not in general safe anyway.
– chepner
Nov 8 at 14:01
add a comment |
up vote
-1
down vote
accepted
Use below script.
https://aaa.com' -H 'Content-Type: application/json' -d '{"msgtype": "text", "text": { "content": '"'$var1'"' }}'
This produces invalid JSON that uses single quotes to quote the value of thecontent
key. Using parameter expansion to create JSON is not in general safe anyway.
– chepner
Nov 8 at 14:01
add a comment |
up vote
-1
down vote
accepted
up vote
-1
down vote
accepted
Use below script.
https://aaa.com' -H 'Content-Type: application/json' -d '{"msgtype": "text", "text": { "content": '"'$var1'"' }}'
Use below script.
https://aaa.com' -H 'Content-Type: application/json' -d '{"msgtype": "text", "text": { "content": '"'$var1'"' }}'
edited Nov 8 at 14:00
chepner
238k29223318
238k29223318
answered Nov 8 at 11:48
AqeelNawazDBA
141
141
This produces invalid JSON that uses single quotes to quote the value of thecontent
key. Using parameter expansion to create JSON is not in general safe anyway.
– chepner
Nov 8 at 14:01
add a comment |
This produces invalid JSON that uses single quotes to quote the value of thecontent
key. Using parameter expansion to create JSON is not in general safe anyway.
– chepner
Nov 8 at 14:01
This produces invalid JSON that uses single quotes to quote the value of the
content
key. Using parameter expansion to create JSON is not in general safe anyway.– chepner
Nov 8 at 14:01
This produces invalid JSON that uses single quotes to quote the value of the
content
key. Using parameter expansion to create JSON is not in general safe anyway.– chepner
Nov 8 at 14:01
add a comment |
up vote
0
down vote
Your variable $var1
doesn't get expanded by the shell because it is inside single quote '
.
You need to use double quote to let bash do the parameter expansion, and escape your json data:
#!/bin/bash
var1="some test message"
curl 'https://link'
-H 'Content-Type: application/json'
-d "
{
"msgtype": "text",
"text": {
"content": "$var1"
}
}"
Or you can use inline document (without the escaping hell, but the command becomes awkward):
#!/bin/bash
var1="some test message"
curl 'https://link'
-H 'Content-Type: application/json'
-d "$(cat <<EOT
{
"msgtype": "text",
"text": {
"content": "$var1"
}
}
EOT
)"
add a comment |
up vote
0
down vote
Your variable $var1
doesn't get expanded by the shell because it is inside single quote '
.
You need to use double quote to let bash do the parameter expansion, and escape your json data:
#!/bin/bash
var1="some test message"
curl 'https://link'
-H 'Content-Type: application/json'
-d "
{
"msgtype": "text",
"text": {
"content": "$var1"
}
}"
Or you can use inline document (without the escaping hell, but the command becomes awkward):
#!/bin/bash
var1="some test message"
curl 'https://link'
-H 'Content-Type: application/json'
-d "$(cat <<EOT
{
"msgtype": "text",
"text": {
"content": "$var1"
}
}
EOT
)"
add a comment |
up vote
0
down vote
up vote
0
down vote
Your variable $var1
doesn't get expanded by the shell because it is inside single quote '
.
You need to use double quote to let bash do the parameter expansion, and escape your json data:
#!/bin/bash
var1="some test message"
curl 'https://link'
-H 'Content-Type: application/json'
-d "
{
"msgtype": "text",
"text": {
"content": "$var1"
}
}"
Or you can use inline document (without the escaping hell, but the command becomes awkward):
#!/bin/bash
var1="some test message"
curl 'https://link'
-H 'Content-Type: application/json'
-d "$(cat <<EOT
{
"msgtype": "text",
"text": {
"content": "$var1"
}
}
EOT
)"
Your variable $var1
doesn't get expanded by the shell because it is inside single quote '
.
You need to use double quote to let bash do the parameter expansion, and escape your json data:
#!/bin/bash
var1="some test message"
curl 'https://link'
-H 'Content-Type: application/json'
-d "
{
"msgtype": "text",
"text": {
"content": "$var1"
}
}"
Or you can use inline document (without the escaping hell, but the command becomes awkward):
#!/bin/bash
var1="some test message"
curl 'https://link'
-H 'Content-Type: application/json'
-d "$(cat <<EOT
{
"msgtype": "text",
"text": {
"content": "$var1"
}
}
EOT
)"
answered Nov 8 at 11:42
oliv
8,1931130
8,1931130
add a comment |
add a comment |
up vote
0
down vote
In general, don't use parameter expansion to define JSON dynamically like this. There is no guarantee that your template, combined with the contents of the variable, produces well-formed JSON. (This is for the same reasons you don't use string interpolation to create dynamic SQL queries.) Use a tool like jq
instead.
curl 'https://link' ...
-d "$(jq --argjson x "$var"
-n '{msgtype: "text", text: {content: $x}}')"
add a comment |
up vote
0
down vote
In general, don't use parameter expansion to define JSON dynamically like this. There is no guarantee that your template, combined with the contents of the variable, produces well-formed JSON. (This is for the same reasons you don't use string interpolation to create dynamic SQL queries.) Use a tool like jq
instead.
curl 'https://link' ...
-d "$(jq --argjson x "$var"
-n '{msgtype: "text", text: {content: $x}}')"
add a comment |
up vote
0
down vote
up vote
0
down vote
In general, don't use parameter expansion to define JSON dynamically like this. There is no guarantee that your template, combined with the contents of the variable, produces well-formed JSON. (This is for the same reasons you don't use string interpolation to create dynamic SQL queries.) Use a tool like jq
instead.
curl 'https://link' ...
-d "$(jq --argjson x "$var"
-n '{msgtype: "text", text: {content: $x}}')"
In general, don't use parameter expansion to define JSON dynamically like this. There is no guarantee that your template, combined with the contents of the variable, produces well-formed JSON. (This is for the same reasons you don't use string interpolation to create dynamic SQL queries.) Use a tool like jq
instead.
curl 'https://link' ...
-d "$(jq --argjson x "$var"
-n '{msgtype: "text", text: {content: $x}}')"
answered Nov 8 at 13:58
chepner
238k29223318
238k29223318
add a comment |
add a comment |
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53206654%2fescape-variable-in-bash-script-curl-request%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown