加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

防止bash向变量输出添加单引号

发布时间:2020-12-15 21:55:42 所属栏目:安全 来源:网络整理
导读:问题: 我正在编写一个脚本,使用curl执行多个HTTP请求,我想将标头添加到变量CURL_HEADERS中,这样我就不必经常输入它们了.当我在curl命令中回显CURL_HEADERS变量时,单引号出现在我不想要它们的地方.我怎么能阻止这个? (为清楚起见,下面的代码是简化的) 码 #!
问题:
我正在编写一个脚本,使用curl执行多个HTTP请求,我想将标头添加到变量CURL_HEADERS中,这样我就不必经常输入它们了.当我在curl命令中回显CURL_HEADERS变量时,单引号出现在我不想要它们的地方.我怎么能阻止这个? (为清楚起见,下面的代码是简化的)

#!/usr/bin/env bash
AUTH_KEY='1234'
set -x
CURL_HEADERS='-H "Authorization: Basic '${AUTH_KEY}'" -H "Content-Type: application/json"'
echo "${CURL_HEADERS}"
curl -s $(echo "${CURL_HEADERS}") 'http://www.example.org' > /dev/null
set +x

预期产出:

+ CURL_HEADERS='-H "Authorization: Basic 1234" -H "Content-Type: application/json"'
+ echo '-H "Authorization: Basic 1234" -H "Content-Type: application/json"'
-H "Authorization: Basic 1234" -H "Content-Type: application/json"
++ echo '-H "Authorization: Basic 1234" -H "Content-Type: application/json"'
+ curl -s -H "Authorization: Basic 1234" -H "Content-Type: application/json" http://www.example.org
+ set +x

实际产出

+ CURL_HEADERS='-H "Authorization: Basic 1234" -H "Content-Type: application/json"'
+ echo '-H "Authorization: Basic 1234" -H "Content-Type: application/json"'
-H "Authorization: Basic 1234" -H "Content-Type: application/json"
++ echo '-H "Authorization: Basic 1234" -H "Content-Type: application/json"'
+ curl -s -H '"Authorization:' Basic '1234"' -H '"Content-Type:' 'application/json"' http://www.example.org
+ set +x

解决方法

一个相当简单的解决方案是使用bash数组来存储您想要传递的四个参数:

CURL_HEADERS=(
             '-H' "Authorization: Basic ${AUTH_KEY}"
             '-H' 'Content-Type: application/json'
)

curl -s "${CURL_HEADERS[@]}" 'http://www.example.org' > /dev/null

与标量变量不同,标量变量只是普通字符的普通字符串,无论它们可能包含多少引号,数组都是字符串列表,每个字符串彼此区分一个.从这个意义上说,bash就像几乎所有其他编程语言一样.

这个问题,以及我建议的解决方案以及其他几个解决方案,在Bash FAQ条目50(I’m trying to put a command in a variable,but the complex cases always fail!)中有详细描述,值得详细阅读. (链接取自@ John1024的评论.)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读