繁体   English   中英

Bash - 处理变量中的(单)引号(对于 Curl 命令)

[英]Bash - handling of (single) quotes in variables (for a Curl command)

我正在编写一个使用 CURL 的脚本。

所有请求都有一些通用的 HTTP 标头。

curl -X GET "..." -H  'accept: */*' -H "api-key: $API_KEY"

所以我想把它们放到一个变量中:

HEADERS="-H  'accept: */*' -H \"api-key: $API_KEY\""

curl -X GET "..." $HEADERS      ### <-- This is what I want to achieve.

如您所见,它需要混合

  • ' s 因为它包含* ,它可以扩展,
  • " s 因为有一个变量。

我已经尝试了很多转义、混合 ' 和 " 的组合,逐渐构建字符串,但最终我总是在 Bash 添加不需要的转义或留下我需要的那些。

我怎样才能在一个变量中同时使用-H参数(即所有 4 个参数),然后我可以在命令中使用它?

有一些类似的问题,但它们是针对其他情况的。

您想要做的是存储一个单词列表(如-Haccept: */*,其中每个单词可能包含空格字符 由于bash用空格分隔字符串中的单词(默认情况下),因此很难将字符串变量用于可能包含空格字符的单词列表。

一个简单的解决方案是使用列表变量 每个列表成员都是一个单词(因此可以根据需要包含空格)。 扩展该列表时,请确保正确引用。 在你的情况下:

declare -a HEADERS
HEADERS=(
  '-H' 'accept: */*'
  '-H' 'api-key: $API_KEY'
)
curl -X GET "..." "${HEADERS[@]}"

扩展数组时请注意"..."字符。 他们将确保每个列表项都扩展为单个专用词。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM