传递一个标头数组以卷曲成一个bash脚本

时间:2016-08-23 17:40:42

标签: arrays bash curl

我正在开发一个脚本,它是一个测试套件,可以使用curl检查所有无效的标题。

我创建了一堆函数,允许我使用默认测试值构建头文件tupe(field_name:field_value)。

build_foo_header() {
  local FOO_KN=${1:-'X-App-Name'}
  local FOO_KV=${2:-'MyApp'}
  echo $FOO_KN: $FOO_KV
}

我想在函数中创建一些数组,缺少标题或带有无效值的标题来测试我的应用行为。

所以我创建了一个示例函数:

build_headers_invalid_X_App_Name_Value() {
  HEADERS=()

  # this array should contain all other required headers
  HEADERS[0]=$(build_foo_header X-App-Name BadValue)
  # HEADERS[1]= header that is required with default value
  # and son on for all the remaning required headers

  echo "${HEADERS[@]/#/-H}" 
}

但是我无法卷曲如何将该数组传递给curl?

$(curl $(build_headers_invalid_X_App_Name_Value) myURl)

似乎将请求发送到HEADERS数组中的第一个标头。

我有大约10个必需的标题,这就是我想以这种方式编写脚本的原因。

1 个答案:

答案 0 :(得分:0)

问题在于回显"${HEADERS[@]/#/-H}",你失去了HEADERS元素中出现的空格与用于分隔输出中两个元素的空格之间的区别。

如果你想使用一个函数,你需要设置一个全局数组,然后直接使用它。不需要命令替换或有用。

build_foo_header() {
  local FOO_KN=${1:-'X-App-Name'}
  local FOO_KV=${2:-'MyApp'}
  echo "$FOO_KN: $FOO_KV"
}

build_headers_invalid_X_App_Name_Value() {
  HEADERS=()

  # this array should contain all other required headers
  HEADERS[0]=$(build_foo_header X-App-Name BadValue)
  # HEADERS[1]= header that is required with default value
  # and son on for all the remaning required headers    
}

build_headers_invalid_X_App_Name_Value
curl "${HEADERS[@]/#/-H}" myUrl