[英]How to loop through multiple comma separated strings in shell
我试图循环遍历多个逗号分隔的字符串,字符串中的逗号数量相同。
我试过下面的代码片段,但它没有返回任何东西。
#!/bin/bash
ip1=“Ok1,ok2,ok3”
ip2=“ty1,ty2,ty3”
for i in ${ip[@]//,/}
do
echo $i
done
有人可以建议我如何改变这一点。
尽快用数组替换逗号分隔的字符串。 如果它是一个硬编码的字符串,那是微不足道的:
ip1=(Ok1 ok2 ok3)
如果它来自外部源(例如,命令行参数或从文件中读取),请使用read
:
ip1s="Ok1,ok2,ok3"
IFS=, read -a ip1 <<< "$ips1"
一旦有了数组,就可以使用数组语法进行迭代:
for i in "${ip1[@]}"; do
echo "$i"
done
如果你有多个 arrays 想要同步迭代,你可以迭代 arrays 的键:
for i in "${!ip1[@]}"; do
echo "${ip1[i]}"
echo "${ip2[i]}"
done
(这忽略了稀疏 arrays 的可能性,但您必须努力获得这些。实际上,具有n
元素的 arrays 通常具有键 0、1、... n
-1。)
修复:
ip
ip1
或者ip2
“
→ "
/
之后添加一个空格来将逗号替换为空格ip1="Ok1,ok2,ok3"
ip2="ty1,ty2,ty3"
for i in ${ip1//,/ }
do
echo "$i"
done
最好使用 arrays,这样项目就会自然地分开,并且您不必进行任何字符串操作。
ip1=(Ok1 ok2 ok3)
ip2=(ty1 ty2 ty3)
for i in "${ip1[@]}"
do
echo "$i"
done
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.