我在 bash 脚本中定义了一个简短的辅助函数。为了便于阅读,我想用在函数外部声明的变量替换样板标头。
我尝试以多种不同的方式引用该声明,但没有任何效果。
我想更换这个
put() {
local response=$(curl -H 'Content-Type: application/json' -H 'Accept: application/vnd.urbanairship+json; version=3;' ...)
echo $response
}
像这样的东西
headers=???
put() {
local response=$(curl $headers ...)
echo $response
}
即$headers
应该扩展到-H 'Content-Type: application/json' -H 'Accept: application/vnd.urbanairship+json; version=3;'
$headers
需要扩展为单独的单词才能作为参数正确传递,所以我什至尝试使用数组。
注:我几乎已经放弃了。为了这么简单的用途,不值得去争论。此时的问题是为了启发。
答案1
可以使用数组来解决这个问题:
headers=( -H 'Content-Type: application/json'
-H 'Accept: application/vnd.urbanairship+json; version=3;' )
然后您可以"${headers[@]}"
在调用中使用curl
:
curl "${headers[@]}" URL
对扩展的引用可确保数组中的四个条目(-H
、Content-Type: application/json
、-H
和Accept: application/vnd.urbanairship+json; version=3;
)被单独引用,因此不会被 shell 进一步分割。
你的职能:
put () {
curl "${headers[@]}" URL
}
请注意,response
您的 win 实现中的变量是不必要的。在调用中使用不加引号的它echo
会另外在空格上分割它的值(默认情况下)并在每个部分应用文件名通配。我们可以将其留给 ,而不是使用echo
来输出调用结果。curl
curl