繁体   English   中英

如何遍历 shell 中的多个逗号分隔字符串

[英]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。)

修复:

  1. ip ip1或者ip2
  2. 将智能引号更改为常规引号: "
  3. 通过在最后一个/之后添加一个空格来将逗号替换为空格
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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM