我想在bash脚本中使用这个命令,每次我都有一个包含参数的不同数组输入?
知道我有一个数组(作为用户的输入),其中每个列都包含"parameteri=valuei"
我想在介绍每个参数的名称和值时去掉硬编码方面。
例如,使用此输入:

"id=123,verbosity=high"

我最终会得到最后的指示:
curl -X POST JENKINS_URL/job/JOB_NAME/build \
  --user USER:TOKEN \
  --data-urlencode json='{"parameter": [{"name":"id", "value":"123"}, {"name":"verbosity", "value":"high"}]}'

什么是清洁的方法?

最佳答案

您可以用这种性感的方式,从指定的key=value parameters构建jsonParameters:

#!/bin/bash

jsonParameters=""
while IFS=',' read -r -a parameterEntries; do
  for parameterEntry in "${parameterEntries[@]}"; do
    IFS='=' read -r key value <<< "$parameterEntry"
    [ ! -z "$jsonParameters" ] && jsonParameters="$jsonParameters,"
    jsonParameters="$jsonParameters {\"name\":\"$key\", \"value\": \"$value\"}"
  done
done <<< "$@"

说明:
第一个循环将创建名为parameterEntries的数组,使用所有指定的参数,每个元素将包含key=value
然后,第二个循环迭代这个数组的每个元素,它将提取键和它的值
最后,只有语法写入才能获得所需的JSON输出
[ ! -z "$jsonParameters" ] && jsonParameters="$jsonParameters,"只是在这里添加一个分离的昏迷,仅当存在多个元素时
然后您只需在需要的地方使用$jsonParameters
curl -X POST JENKINS_URL/job/JOB_NAME/build \
  --user USER:TOKEN \
  --data-urlencode json="{\"parameter\": [$jsonParameters]}"

08-16 23:58