如何在 bash 脚本中的 curl 命令内传递变量

如何在 bash 脚本中的 curl 命令内传递变量

我正在创建一个 bash 脚本,需要在其中传递变量$matchteams 和 $matchtime进入下面的curl命令

curl -X POST \
  'http://5.12.4.7:3000/send' \
  --header 'Accept: */*' \
  --header 'User-Agent: Thunder Client (https://www.thunderclient.com)' \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "token": "abcdjbdifusfus",
  "title": "$matchteams | $matchtime",
  "msg": "hello all",
  "channel": "1021890237204529235"
}'

有人可以帮帮我吗

答案1

单引号内的文本被视为文字:

--data-raw '{
  "token": "abcdjbdifusfus",
  "title": "$matchteams | $matchtime",
  "msg": "hello all",
  "channel": "1021890237204529235"
}'

(变量周围的双引号也被视为文字。)在这种情况下,您需要使用单引号,以便 shell 解析和扩展变量,或者将整个字符串括在双引号中,转义适当地使用文字双引号:

# Swapping between single quote strings and double quote strings
--data-raw '{
  "token": "abcdjbdifusfus",
  "title": "'"$matchteams | $matchtime"'",
  "msg": "hello all",
  "channel": "1021890237204529235"
}'

# Enclosing the entire string in double quotes with escaping as necessary
--data-raw "{
  \"token\": \"abcdjbdifusfus\",
  \"title\": \"$matchteams | $matchtime\",
  \"msg\": \"hello all\",
  \"channel\": \"1021890237204529235\"
}"

请记住,它"abc"'def'是由 shell 扩展的,abcdef因此交换引用样式中字符串是完全可以接受的。总的来说,我倾向于使用第一种风格。

相关内容