使用列表进行 bash 脚本字符串操作



我想使用映射端口生成一个逗号分隔的 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的后缀。

最新更新