防止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的评论.) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- bootstrap引入的css和js
- 使用Postgres创建OLAP多维数据集并通过.net webservices /
- twitter-bootstrap – Navbar下拉列表无法在移动设备上运行
- Should angular $watch be removed when scope destroyed?
- 全局样式 bootstrap
- 在 redux 中集成 angular di 机制
- 如何关闭使用?后缀自动保存vim文件
- AngularJS 2 – 使用哪种语言? (Typescript,Javascript,Da
- framwork 3.5支持webservice返回DataTable
- scala – Slick:autoInc如何在MultiDBCakeExample示例中工