我想使用映射端口生成一个逗号分隔的 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
因此,您有一个要修改的 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
您可以使用:
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
假设您的 IP 地址位于数组中,例如
zk_ip=( '192.168.0.10' '192.168.0.20' '192.168.0.30' )
然后
( IFS=','; printf '%sn' "${zk_ip[*]/%/:2181}" )
会打印
192.168.0.10:2181,192.168.0.20:2181,192.168.0.30:2181
设置IFS
"${zk_ip[*]}"
扩展到包含数组所有条目的逗号分隔字符串。 对于/%/:2181
每个元素在打印前都带有字符串:2181
的后缀。