How to set variable in the curl command in bash?
Clash Royale CLAN TAG#URR8PPP
up vote
4
down vote
favorite
I have a bash file:
#!/bin/bash
# yesnobox.sh - An inputbox demon shell script
OUTPUT="/tmp/input.txt"
# create empty file
>$OUTPUT
# cleanup - add a trap that will remove $OUTPUT
# if any of the signals - SIGHUP SIGINT SIGTERM it received.
trap "rm $OUTPUT; exit" SIGHUP SIGINT SIGTERM
# show an inputbox
dialog --title "Inputbox"
--backtitle "Search vacancies"
--inputbox "Enter your query " 8 60 2>$OUTPUT
# get respose
respose=$?
# get data stored in $OUPUT using input redirection
name=$(<$OUTPUT)
curl -d '"query":"developer", "turnOff":true' -H "Content-Type: application/json" -X POST http://localhost:8080/explorer
in last string (curl command) I want to set variable name instead "developer". How to correctly insert it?
command-line scripts curl
add a comment |Â
up vote
4
down vote
favorite
I have a bash file:
#!/bin/bash
# yesnobox.sh - An inputbox demon shell script
OUTPUT="/tmp/input.txt"
# create empty file
>$OUTPUT
# cleanup - add a trap that will remove $OUTPUT
# if any of the signals - SIGHUP SIGINT SIGTERM it received.
trap "rm $OUTPUT; exit" SIGHUP SIGINT SIGTERM
# show an inputbox
dialog --title "Inputbox"
--backtitle "Search vacancies"
--inputbox "Enter your query " 8 60 2>$OUTPUT
# get respose
respose=$?
# get data stored in $OUPUT using input redirection
name=$(<$OUTPUT)
curl -d '"query":"developer", "turnOff":true' -H "Content-Type: application/json" -X POST http://localhost:8080/explorer
in last string (curl command) I want to set variable name instead "developer". How to correctly insert it?
command-line scripts curl
1
Sidenote: you can create a temporary file like so:OUTPUT=$(mktemp)
. It will create a unique file (sth. like/tmp/tmp.RyR3UlsV5c
). However, you will still need to delete it manually, like you already do.mktemp
creates such a file and returns (prints) its filename.
â PerlDuck
Aug 31 at 12:55
add a comment |Â
up vote
4
down vote
favorite
up vote
4
down vote
favorite
I have a bash file:
#!/bin/bash
# yesnobox.sh - An inputbox demon shell script
OUTPUT="/tmp/input.txt"
# create empty file
>$OUTPUT
# cleanup - add a trap that will remove $OUTPUT
# if any of the signals - SIGHUP SIGINT SIGTERM it received.
trap "rm $OUTPUT; exit" SIGHUP SIGINT SIGTERM
# show an inputbox
dialog --title "Inputbox"
--backtitle "Search vacancies"
--inputbox "Enter your query " 8 60 2>$OUTPUT
# get respose
respose=$?
# get data stored in $OUPUT using input redirection
name=$(<$OUTPUT)
curl -d '"query":"developer", "turnOff":true' -H "Content-Type: application/json" -X POST http://localhost:8080/explorer
in last string (curl command) I want to set variable name instead "developer". How to correctly insert it?
command-line scripts curl
I have a bash file:
#!/bin/bash
# yesnobox.sh - An inputbox demon shell script
OUTPUT="/tmp/input.txt"
# create empty file
>$OUTPUT
# cleanup - add a trap that will remove $OUTPUT
# if any of the signals - SIGHUP SIGINT SIGTERM it received.
trap "rm $OUTPUT; exit" SIGHUP SIGINT SIGTERM
# show an inputbox
dialog --title "Inputbox"
--backtitle "Search vacancies"
--inputbox "Enter your query " 8 60 2>$OUTPUT
# get respose
respose=$?
# get data stored in $OUPUT using input redirection
name=$(<$OUTPUT)
curl -d '"query":"developer", "turnOff":true' -H "Content-Type: application/json" -X POST http://localhost:8080/explorer
in last string (curl command) I want to set variable name instead "developer". How to correctly insert it?
command-line scripts curl
command-line scripts curl
edited Aug 31 at 15:12
ñÃÂsýù÷
23.5k2193152
23.5k2193152
asked Aug 31 at 12:40
ÃÂðûõÃÂÃÂù ÃÂÃÂÃÂ÷øÃÂÃÂúøù
585
585
1
Sidenote: you can create a temporary file like so:OUTPUT=$(mktemp)
. It will create a unique file (sth. like/tmp/tmp.RyR3UlsV5c
). However, you will still need to delete it manually, like you already do.mktemp
creates such a file and returns (prints) its filename.
â PerlDuck
Aug 31 at 12:55
add a comment |Â
1
Sidenote: you can create a temporary file like so:OUTPUT=$(mktemp)
. It will create a unique file (sth. like/tmp/tmp.RyR3UlsV5c
). However, you will still need to delete it manually, like you already do.mktemp
creates such a file and returns (prints) its filename.
â PerlDuck
Aug 31 at 12:55
1
1
Sidenote: you can create a temporary file like so:
OUTPUT=$(mktemp)
. It will create a unique file (sth. like /tmp/tmp.RyR3UlsV5c
). However, you will still need to delete it manually, like you already do. mktemp
creates such a file and returns (prints) its filename.â PerlDuck
Aug 31 at 12:55
Sidenote: you can create a temporary file like so:
OUTPUT=$(mktemp)
. It will create a unique file (sth. like /tmp/tmp.RyR3UlsV5c
). However, you will still need to delete it manually, like you already do. mktemp
creates such a file and returns (prints) its filename.â PerlDuck
Aug 31 at 12:55
add a comment |Â
4 Answers
4
active
oldest
votes
up vote
10
down vote
accepted
To access variables, you have to put a dollar sign in front of the name: $name
However, variables do not get expanded inside strings enclosed in 'single quotes'. You should have them wrapped inside "double quotes" though, to prevent word splitting of the expanded value, if it might contain spaces.
So there are basically two ways, we either put the whole argument in double quotes to make the variable expandable, but then we have to escape the double quote characters inside, so that they end up in the actual parameter (command line shortened):
curl -d ""query":"$name", "turnOff":true" ...
Alternatively, we can concatenate string literals enclosed in different quote types by writing them immediately next to each other:
curl -d '"query":"'"$name"'", "turnOff":true' ...
add a comment |Â
up vote
6
down vote
Since the value for curls -d
parameter is within single quotes means that there will be no parameter expansion, just adding the variable would not work. You can get around this by ending the string literal, adding the variable and then starting the string literal again:
curl -d '"query":"'"$name"'", "turnOff":true' -H "Content-Type: application/json" -X POST http://localhost:8080/explorer
The extra double quotes around the variable are used to prevent unwanted shell parameter expansion.
add a comment |Â
up vote
5
down vote
@ByteCommander's answer is good, assuming you know that the value of name
is a properly escaped JSON string literal. If you can't (or don't want to) make that assumption, use a tool like jq
to generate the JSON for you.
curl -d "$(jq -n --arg n "$name" 'query: $n, turnOff: true')"
-H "Content-Type: application/json" -X POST http://localhost:8080/explorer
add a comment |Â
up vote
2
down vote
Some might find this more readable and maintainable since it avoids using escaping, and sequences of single and double quotes, which are hard to follow and match.
Use Bash's equivalent of sprintf
to template the substitution:
printf -v data '"query":"%s", "turnOff":true' "developer"
curl -d "$data" -H "Content-Type: application/json" -X POST http://localhost:8080/explorer
add a comment |Â
4 Answers
4
active
oldest
votes
4 Answers
4
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
10
down vote
accepted
To access variables, you have to put a dollar sign in front of the name: $name
However, variables do not get expanded inside strings enclosed in 'single quotes'. You should have them wrapped inside "double quotes" though, to prevent word splitting of the expanded value, if it might contain spaces.
So there are basically two ways, we either put the whole argument in double quotes to make the variable expandable, but then we have to escape the double quote characters inside, so that they end up in the actual parameter (command line shortened):
curl -d ""query":"$name", "turnOff":true" ...
Alternatively, we can concatenate string literals enclosed in different quote types by writing them immediately next to each other:
curl -d '"query":"'"$name"'", "turnOff":true' ...
add a comment |Â
up vote
10
down vote
accepted
To access variables, you have to put a dollar sign in front of the name: $name
However, variables do not get expanded inside strings enclosed in 'single quotes'. You should have them wrapped inside "double quotes" though, to prevent word splitting of the expanded value, if it might contain spaces.
So there are basically two ways, we either put the whole argument in double quotes to make the variable expandable, but then we have to escape the double quote characters inside, so that they end up in the actual parameter (command line shortened):
curl -d ""query":"$name", "turnOff":true" ...
Alternatively, we can concatenate string literals enclosed in different quote types by writing them immediately next to each other:
curl -d '"query":"'"$name"'", "turnOff":true' ...
add a comment |Â
up vote
10
down vote
accepted
up vote
10
down vote
accepted
To access variables, you have to put a dollar sign in front of the name: $name
However, variables do not get expanded inside strings enclosed in 'single quotes'. You should have them wrapped inside "double quotes" though, to prevent word splitting of the expanded value, if it might contain spaces.
So there are basically two ways, we either put the whole argument in double quotes to make the variable expandable, but then we have to escape the double quote characters inside, so that they end up in the actual parameter (command line shortened):
curl -d ""query":"$name", "turnOff":true" ...
Alternatively, we can concatenate string literals enclosed in different quote types by writing them immediately next to each other:
curl -d '"query":"'"$name"'", "turnOff":true' ...
To access variables, you have to put a dollar sign in front of the name: $name
However, variables do not get expanded inside strings enclosed in 'single quotes'. You should have them wrapped inside "double quotes" though, to prevent word splitting of the expanded value, if it might contain spaces.
So there are basically two ways, we either put the whole argument in double quotes to make the variable expandable, but then we have to escape the double quote characters inside, so that they end up in the actual parameter (command line shortened):
curl -d ""query":"$name", "turnOff":true" ...
Alternatively, we can concatenate string literals enclosed in different quote types by writing them immediately next to each other:
curl -d '"query":"'"$name"'", "turnOff":true' ...
answered Aug 31 at 12:52
Byte Commander
59.7k26159268
59.7k26159268
add a comment |Â
add a comment |Â
up vote
6
down vote
Since the value for curls -d
parameter is within single quotes means that there will be no parameter expansion, just adding the variable would not work. You can get around this by ending the string literal, adding the variable and then starting the string literal again:
curl -d '"query":"'"$name"'", "turnOff":true' -H "Content-Type: application/json" -X POST http://localhost:8080/explorer
The extra double quotes around the variable are used to prevent unwanted shell parameter expansion.
add a comment |Â
up vote
6
down vote
Since the value for curls -d
parameter is within single quotes means that there will be no parameter expansion, just adding the variable would not work. You can get around this by ending the string literal, adding the variable and then starting the string literal again:
curl -d '"query":"'"$name"'", "turnOff":true' -H "Content-Type: application/json" -X POST http://localhost:8080/explorer
The extra double quotes around the variable are used to prevent unwanted shell parameter expansion.
add a comment |Â
up vote
6
down vote
up vote
6
down vote
Since the value for curls -d
parameter is within single quotes means that there will be no parameter expansion, just adding the variable would not work. You can get around this by ending the string literal, adding the variable and then starting the string literal again:
curl -d '"query":"'"$name"'", "turnOff":true' -H "Content-Type: application/json" -X POST http://localhost:8080/explorer
The extra double quotes around the variable are used to prevent unwanted shell parameter expansion.
Since the value for curls -d
parameter is within single quotes means that there will be no parameter expansion, just adding the variable would not work. You can get around this by ending the string literal, adding the variable and then starting the string literal again:
curl -d '"query":"'"$name"'", "turnOff":true' -H "Content-Type: application/json" -X POST http://localhost:8080/explorer
The extra double quotes around the variable are used to prevent unwanted shell parameter expansion.
answered Aug 31 at 12:51
mgor
851410
851410
add a comment |Â
add a comment |Â
up vote
5
down vote
@ByteCommander's answer is good, assuming you know that the value of name
is a properly escaped JSON string literal. If you can't (or don't want to) make that assumption, use a tool like jq
to generate the JSON for you.
curl -d "$(jq -n --arg n "$name" 'query: $n, turnOff: true')"
-H "Content-Type: application/json" -X POST http://localhost:8080/explorer
add a comment |Â
up vote
5
down vote
@ByteCommander's answer is good, assuming you know that the value of name
is a properly escaped JSON string literal. If you can't (or don't want to) make that assumption, use a tool like jq
to generate the JSON for you.
curl -d "$(jq -n --arg n "$name" 'query: $n, turnOff: true')"
-H "Content-Type: application/json" -X POST http://localhost:8080/explorer
add a comment |Â
up vote
5
down vote
up vote
5
down vote
@ByteCommander's answer is good, assuming you know that the value of name
is a properly escaped JSON string literal. If you can't (or don't want to) make that assumption, use a tool like jq
to generate the JSON for you.
curl -d "$(jq -n --arg n "$name" 'query: $n, turnOff: true')"
-H "Content-Type: application/json" -X POST http://localhost:8080/explorer
@ByteCommander's answer is good, assuming you know that the value of name
is a properly escaped JSON string literal. If you can't (or don't want to) make that assumption, use a tool like jq
to generate the JSON for you.
curl -d "$(jq -n --arg n "$name" 'query: $n, turnOff: true')"
-H "Content-Type: application/json" -X POST http://localhost:8080/explorer
answered Aug 31 at 14:53
chepner
1513
1513
add a comment |Â
add a comment |Â
up vote
2
down vote
Some might find this more readable and maintainable since it avoids using escaping, and sequences of single and double quotes, which are hard to follow and match.
Use Bash's equivalent of sprintf
to template the substitution:
printf -v data '"query":"%s", "turnOff":true' "developer"
curl -d "$data" -H "Content-Type: application/json" -X POST http://localhost:8080/explorer
add a comment |Â
up vote
2
down vote
Some might find this more readable and maintainable since it avoids using escaping, and sequences of single and double quotes, which are hard to follow and match.
Use Bash's equivalent of sprintf
to template the substitution:
printf -v data '"query":"%s", "turnOff":true' "developer"
curl -d "$data" -H "Content-Type: application/json" -X POST http://localhost:8080/explorer
add a comment |Â
up vote
2
down vote
up vote
2
down vote
Some might find this more readable and maintainable since it avoids using escaping, and sequences of single and double quotes, which are hard to follow and match.
Use Bash's equivalent of sprintf
to template the substitution:
printf -v data '"query":"%s", "turnOff":true' "developer"
curl -d "$data" -H "Content-Type: application/json" -X POST http://localhost:8080/explorer
Some might find this more readable and maintainable since it avoids using escaping, and sequences of single and double quotes, which are hard to follow and match.
Use Bash's equivalent of sprintf
to template the substitution:
printf -v data '"query":"%s", "turnOff":true' "developer"
curl -d "$data" -H "Content-Type: application/json" -X POST http://localhost:8080/explorer
edited Aug 31 at 21:02
Sergiy Kolodyazhnyy
65.7k9134287
65.7k9134287
answered Aug 31 at 20:52
Dennis Williamson
1,77221119
1,77221119
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
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2faskubuntu.com%2fquestions%2f1070864%2fhow-to-set-variable-in-the-curl-command-in-bash%23new-answer', 'question_page');
);
Post as a guest
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
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
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
1
Sidenote: you can create a temporary file like so:
OUTPUT=$(mktemp)
. It will create a unique file (sth. like/tmp/tmp.RyR3UlsV5c
). However, you will still need to delete it manually, like you already do.mktemp
creates such a file and returns (prints) its filename.â PerlDuck
Aug 31 at 12:55