Bash script: Use string variable in curl JSON Post data

后端 未结 3 841
小蘑菇
小蘑菇 2020-11-30 10:04

I want to send a json request and embedd a variable in the post data. I did a little research and I came up with the single quotes around the variable.

    #         


        
3条回答
  •  無奈伤痛
    2020-11-30 11:01

    Update: use the simpler

    request_body=$(cat <

    rather than what I explain below. However, if it is an option, use jq to generate the JSON instead. This ensures that the value of $FILENAME is properly quoted.

    request_body=$(jq -n --arg fname "$FILENAME" '
    {
      jsonrpc: "2.0",
      method: "Player.Open",
      params: {item: {file: $fname}}
    }'
    

    It would be simpler to define a variable with the contents of the request body first:

    #!/bin/bash
    header="Content-Type: application/json"
    FILENAME="/media/file.avi"
    request_body=$(< <(cat <

    This definition might require an explanation to understand, but note two big benefits:

    1. You eliminate a level of quoting
    2. You can easily format the text for readability.

    First, you have a simple command substitution that reads from a file:

    $( < ... )   # bash improvement over $( cat ... )
    

    Instead of a file name, though, you specify a process substitution, in which the output of a command is used as if it were the body of a file.

    The command in the process substitution is simply cat, which reads from a here document. It is the here document that contains your request body.

提交回复
热议问题