我想在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]}"