我想用映射的端口生成一个逗号分隔的ip值并创建一个字符串。
这是我的代码:
zk_ip="['192.168.0.10', '192.168.0.20', '192.168.0.30']"
zk_host=""
for i in $zk_ip[@]
do
add=$(echo "$i:2181")
zk_host="$zk_host $add"
done
echo $zk_host
输出:
[192.168.0.10,:2181 192.168.0.20, :2181 192.168.0.30]:2181
预期输出:
192.168.0.10:2181, 192.168.0.20:2181, 192.168.0.30:2181
答案 0 :(得分:2)
因此,您有一个要修改的JSON数组(JSON字符串用双引号引起来)。
我将使用JSON解析器进行管理:jq
zk_ip="['192.168.0.10', '192.168.0.20', '192.168.0.30']"
new_ip=$(echo "$zk_ip" | tr "'" '"' | jq -c 'map("\(.):2181")')
echo "$new_ip"
["192.168.0.10:2181","192.168.0.20:2181","192.168.0.30:2181"]
如果您希望输出看起来不像JSON,则可以执行以下操作:
new_ip=$(echo "$zk_ip" | tr "'" '"' | jq -r 'map("\(.):2181") | join(", ")')
echo "$new_ip"
192.168.0.10:2181, 192.168.0.20:2181, 192.168.0.30:2181
答案 1 :(得分:1)
您可以使用:
zk_ip =“ ['192.168.0.10','192.168.0.20','192.168.0.30']”
zk_host=""
for i in ${zk_ip//[][,\']/}; do
zk_host+="$i:2181, "
done
echo "${zk_host%, }"
192.168.0.10:2181, 192.168.0.20:2181, 192.168.0.30:2181
答案 2 :(得分:0)
假设您的IP地址位于一个数组中,例如
zk_ip=( '192.168.0.10' '192.168.0.20' '192.168.0.30' )
然后
( IFS=','; printf '%s\n' "${zk_ip[*]/%/:2181}" )
将打印
192.168.0.10:2181,192.168.0.20:2181,192.168.0.30:2181
设置IFS
会使"${zk_ip[*]}"
扩展为包含数组所有条目的逗号分隔的字符串。对于/%/:2181
,在打印之前,每个元素都以字符串:2181
结尾。