在shell脚本中将逗号分隔的命令行参数转换为json

Val*_*hok 2 linux shell

我正在使用以下脚本从逗号分隔值生成 json 数据以提供给 zabbix。但我得到了一个额外的逗号符号。请尝试优化最后一行的逗号。

#/bin/bash
IFS=':, ' read -r -a array <<< "$1"
idx=0
echo {\"data\":[
while [ -n "${array[$idx]}" ]; do
        echo -n \{\"{#R_IP}\":\""${array[$idx]}"\"}
        let idx=$idx+1
        [ -n "$array[idx]}" ] && echo "," || echo
done
echo ]}
exit

Run Code Online (Sandbox Code Playgroud)

输入

./test.sh embimsrv.exe,emcms.exe,emcmsg.exe,emforecastsrv.exe,emgtw.exe,emguisrv.exe,emmaintag.exe,emselfservicesrv.exe,Naming_Service.exe,p_ctmce.exe,p_ctmcs.exe,p_ctmrt.exe,p_ctmtr.exe,p_ctmwd.exe
Run Code Online (Sandbox Code Playgroud)

输出

{"data":[
{"{#R_IP}":"embimsrv.exe"},
{"{#R_IP}":"emcms.exe"},
{"{#R_IP}":"emcmsg.exe"},
{"{#R_IP}":"emforecastsrv.exe"},
{"{#R_IP}":"emgtw.exe"},
{"{#R_IP}":"emguisrv.exe"},
{"{#R_IP}":"emmaintag.exe"},
{"{#R_IP}":"emselfservicesrv.exe"},
{"{#R_IP}":"Naming_Service.exe"},
{"{#R_IP}":"p_ctmce.exe"},
{"{#R_IP}":"p_ctmcs.exe"},
{"{#R_IP}":"p_ctmrt.exe"},
{"{#R_IP}":"p_ctmtr.exe"},
{"{#R_IP}":"p_ctmwd.exe"},
]}

Run Code Online (Sandbox Code Playgroud)

che*_*ner 7

使用合适的工具(如jq)来生成您的 JSON。

printf '%s' "$1" | jq -R 'split(",") | map({"{#R_IP}": .}) | {data: .}'
Run Code Online (Sandbox Code Playgroud)