I'm trying to loop through multiple comma separated strings with same number of commas in the string.
I've tried the below snippet but it doesn't return anything.
#!/bin/bash
ip1=“Ok1,ok2,ok3”
ip2=“ty1,ty2,ty3”
for i in ${ip[@]//,/}
do
echo $i
done
Could someone please suggest how I can change this.
Replace the comma-separated string with an array as soon as feasible. If it's a hard-coded string, that's trivial:
ip1=(Ok1 ok2 ok3)
If it's from an external source (say, a command-line argument or read from a file), use read
:
ip1s="Ok1,ok2,ok3"
IFS=, read -a ip1 <<< "$ips1"
Once you have an array, you can use array syntax for iteration:
for i in "${ip1[@]}"; do
echo "$i"
done
If you have multiple arrays you want to iterate in lockstep, you can iterate over the keys of the arrays:
for i in "${!ip1[@]}"; do
echo "${ip1[i]}"
echo "${ip2[i]}"
done
(This ignores the possibility of sparse arrays, but you have to work to get those. In practice, arrays with n
elements usually have keys 0, 1, ... n
-1.)
Fixes:
ip
to ip1
or ip2
“
→ "
/
ip1="Ok1,ok2,ok3"
ip2="ty1,ty2,ty3"
for i in ${ip1//,/ }
do
echo "$i"
done
It would be better to use arrays, then the items would be naturally separated and you wouldn't have to do any string manipulation.
ip1=(Ok1 ok2 ok3)
ip2=(ty1 ty2 ty3)
for i in "${ip1[@]}"
do
echo "$i"
done
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.