在bash脚本中使用curl时标题值中的空格
我得到以下错误 curl:6无法解析主机:someToken 但当我运行以$curlcmd输出的确切行时,它直接在终端上运行良好在bash脚本中使用curl时标题值中的空格,bash,shell,curl,Bash,Shell,Curl,我得到以下错误 curl:6无法解析主机:someToken 但当我运行以$curlcmd输出的确切行时,它直接在终端上运行良好 curl -X POST http://google.com --data "{}" -H "Content-Type:application/json" -H "Authorization:Bearer someToken" 我认为这是由于持票人和代币之间的空白,我们需要逃跑吗 bash中的一般经验法则是永远不要尝试使用变量作为占位符来存储命令,然后从中运行命令。
curl -X POST http://google.com --data "{}" -H "Content-Type:application/json" -H "Authorization:Bearer someToken"
我认为这是由于持票人和代币之间的空白,我们需要逃跑吗 bash中的一般经验法则是永远不要尝试使用变量作为占位符来存储命令,然后从中运行命令。本节将详细介绍这一点 随着越来越多的引号投入使用,您的命令将难以维护。最简单的解决方案是使用数组。但对于您的情况,仔细的嵌套将解决问题
payload='{}'
hostURL='http://google.com'
authToken='someToken'
authHeader='Authorization:Bearer "'"$authToken"'"'
既然定义了变量,就定义一个数组来存储命令参数
curlCMD=(-X POST "$hostURL" --data "$payload" -H "Content-Type:application/json" -H "$authHeader")
现在做一个适当的扩展
curl "${curlCMD[@]}"
试试看:
curl -X POST $hostURL --data $payload -H 'Content-Type: application/json' -H 'Authorization: Bearer '${authToken}''
如果您只想查看脚本中正在执行的命令,可以 使用set-x 例如:
$ set -x; echo a; echo b; echo c
+ echo a
a
+ echo b
b
+ echo c
c
使用原始代码:
!/bin/bash
集合x
主机http://google.com'
AUTH_TOKEN='someToken'
有效载荷=“{}”
authHeader=授权:承载“$AUTH\u令牌”
curl-X POST$HOST_URL-data$payload-H'内容类型:application/json'\
-H$authHeader
或者,如果只想查看脚本的一部分,可以将它们包装到子shell中
其中包含集合-x:
$ echo a; ( set -x; echo b ); echo c
a
+ echo b
b
c
使用您的脚本:
!/bin/bash
主机http://google.com'
AUTH_TOKEN='someToken'
集合x
有效载荷=“{}”
authHeader=授权:承载“$AUTH\u令牌”
curl-X POST$HOST_URL-data$payload-H'内容类型:application/json'\
-H$authHeader
看到和
$ echo a; ( set -x; echo b ); echo c
a
+ echo b
b
c