如何在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

如果你有多个数组想要步调一致地迭代,你可以迭代数组的密钥:

for i in "${!ip1[@]}"; do
echo "${ip1[i]}"
echo "${ip2[i]}"
done

(这忽略了稀疏数组的可能性,但你必须努力获得这些。在实践中,具有n元素的数组通常具有密钥0,1,…n-1。(

修复:

  1. ip更改为ip1ip2
  2. 将智能引号更改为常规引号:"
  3. 在最后的/后面添加一个空格,将逗号替换为空格
ip1="Ok1,ok2,ok3"
ip2="ty1,ty2,ty3"

for i in ${ip1//,/ }
do 
echo "$i"
done

最好使用数组,这样项目就可以自然分离,而且不必进行任何字符串操作。

ip1=(Ok1 ok2 ok3)
ip2=(ty1 ty2 ty3)

for i in "${ip1[@]}"
do 
echo "$i"
done

相关内容

  • 没有找到相关文章