[英]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 个参数),然后我可以在命令中使用它?
有一些类似的问题,但它们是针对其他情况的。
您想要做的是存储一个单词列表(如-H
或accept: */*
) ,其中每个单词可能包含空格字符。 由于bash
用空格分隔字符串中的单词(默认情况下),因此很难将字符串变量用于可能包含空格字符的单词列表。
一个简单的解决方案是使用列表变量。 每个列表成员都是一个单词(因此可以根据需要包含空格)。 扩展该列表时,请确保正确引用。 在你的情况下:
declare -a HEADERS
HEADERS=(
'-H' 'accept: */*'
'-H' 'api-key: $API_KEY'
)
curl -X GET "..." "${HEADERS[@]}"
扩展数组时请注意"..."
字符。 他们将确保每个列表项都扩展为单个专用词。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.