Bash 函数中的变量引用

Bash 函数中的变量引用

我在 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

对扩展的引用可确保数组中的四个条目(-HContent-Type: application/json-HAccept: application/vnd.urbanairship+json; version=3;)被单独引用,因此不会被 shell 进一步分割。

你的职能:

put () {
    curl "${headers[@]}" URL
}

请注意,response您的 win 实现中的变量是不必要的。在调用中使用不加引号的它echo会另外在空格上分割它的值(默认情况下)并在每个部分应用文件名通配。我们可以将其留给 ,而不是使用echo来输出调用结果。curlcurl

相关内容