首页 > 解决方案 > 使用列表操作 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

标签: bashshell

解决方案


因此,您有一个要修改的 JSON 格式的数组(JSON 字符串用双引号括起来)。

我会使用 JSON 解析器来管理这个:

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

推荐阅读