如何在shell脚本中传递变量给curl命令

54

我有一个curl命令:

curl -u ${USER_ID}:${PASSWORD} -X GET 'http://blah.gso.woo.com:8080/rest/job-execution/job-details/${job_id}'

变量job_id已经被赋值,假设它的值是1160。当我在命令行中执行curl命令时,它会给出以下错误信息:

{"message":"Sorry. An unexpected error occured.", "stacktrace":"Bad Request. The request could not be understood by the server due to malformed syntax."}
如果我直接在命令中传递数字“1160”,如下所示,curl命令就会起作用。
curl -u ${USER_ID}:${PASSWORD} -X GET 'http://blah.gso.woo.com:8080/rest/job-execution/job-details/1160'

我希望能够在curl命令中传递变量的值。

5个回答

65
在使用变量时,只能使用双引号而不是单引号:单引号内的变量不会被展开。要了解 ' 和 " 以及 ` 之间的区别,请参阅 [这里](http://mywiki.wooledge.org/Quotes) 和 [这里](https://web.archive.org/web/20230314111401/https://wiki.bash-hackers.org/syntax/words)。

在将值1160分配给job_id时需要使用双引号吗?您的意思是像这样吗?"job_id=1160"。然后在curl命令中使用${job_id}调用它? - user1452759
12
是的:job_id=1160; curl -u ${USER_ID}:${PASSWORD} -X GET "http://lppma670.gso.aexp.com:8080/rest/job-execution/job-details/${job_id}" - Gilles Quénot
非常感谢您的帮助!!它起作用了! :) 我将在5分钟内接受您的答案。所以会这样做 :) - user1452759

37
我之前也遇到了同样的传递问题,通过使用 ' " $1 " ' 解决了这个问题。
请查看下面的connection.uri
curl -X POST -H "Content-Type: application/json" --data '
  {"name": "mysql-atlas-sink",
   "config": {
     "connector.class":"com.mongodb.kafka.connect.MongoSinkConnector",
     "tasks.max":"1",
     "topics":"mysqlstock.Stocks.StockData",
     "connection.uri":"'"$1"'",
     "database":"Stocks",
     "collection":"StockData",
     "key.converter":"io.confluent.connect.avro.AvroConverter",
     "key.converter.schema.registry.url":"http://schema-registry:8081",
     "value.converter":"io.confluent.connect.avro.AvroConverter",
     "value.converter.schema.registry.url":"http://schema-registry:8081",
     "transforms": "ExtractField",
     "transforms.ExtractField.type":"org.apache.kafka.connect.transforms.ExtractField$Value",
     "transforms.ExtractField.field":"after"
}}' http://localhost:8083/connectors -w "\n"

2
我发现这种方法可行,但我认为没有必要在环境变量周围添加补充双引号。换句话说,在上面的例子中,'$1'"'"$1"'"一样有效。我认为这两种方法都是通过将单引号字符串分成两个相邻的单引号子字符串来实现的,每个子字符串都与扩展的$1环境变量相邻。 - CODE-REaD

4
如何将 通过 变量传递给
myvar=foobar
curl -H "Content-Type: application/json" --data @/dev/stdin<<EOF
{ "xkey": "$myvar" }
EOF

使用开关-d--dataPOST请求是隐式的

4

使用变量在双引号单引号内:"'$variable'"

#!/usr/bin/bash
token=xxxxxx
curl --location --request POST 'http://127.0.0.1:8009/submit/expense/' \
        --form 'token="'$token'"' \
        --form 'text="'$1'"' \
        --form 'amount="'$2'"'

1
userdetails="$username:$apppassword"
base_url_part='https://api.XXX.org/2.0/repositories'
path="/$teamName/$repoName/downloads/$filename"
base_url="$base_url_part$path"**strong text**
curl  -L -u "$userdetails" "$base_url" -o "$downloadfilename"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接