如何在 shell 中遍历多个逗号分隔的字符串
How to loop through multiple comma separated strings in shell
我正在尝试遍历多个以逗号分隔的字符串,字符串中的逗号数量相同。
我已经尝试了下面的代码片段,但它 return 没有任何效果。
#!/bin/bash
ip1=“Ok1,ok2,ok3”
ip2=“ty1,ty2,ty3”
for i in ${ip[@]//,/}
do
echo $i
done
有人可以建议我如何更改它。
修复:
- 将
ip
更改为ip1
或ip2
- 将智能引号更改为常规引号:
“
→ "
- 在最后的
/
之后添加一个 space,用 spaces 替换逗号
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
尽快用数组替换 comma-separated 字符串。如果它是一个 hard-coded 字符串,那是微不足道的:
ip1=(Ok1 ok2 ok3)
如果它来自外部来源(例如,command-line 参数或从文件中读取),请使用 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.)
我正在尝试遍历多个以逗号分隔的字符串,字符串中的逗号数量相同。
我已经尝试了下面的代码片段,但它 return 没有任何效果。
#!/bin/bash
ip1=“Ok1,ok2,ok3”
ip2=“ty1,ty2,ty3”
for i in ${ip[@]//,/}
do
echo $i
done
有人可以建议我如何更改它。
修复:
- 将
ip
更改为ip1
或ip2
- 将智能引号更改为常规引号:
“
→"
- 在最后的
/
之后添加一个 space,用 spaces 替换逗号
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
尽快用数组替换 comma-separated 字符串。如果它是一个 hard-coded 字符串,那是微不足道的:
ip1=(Ok1 ok2 ok3)
如果它来自外部来源(例如,command-line 参数或从文件中读取),请使用 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.)