Следующий скрипт bash возвращает 4, а должно быть 2, то есть 2 IPS.
#!/bin/bash STR="1.1.1.1***2.2.2.2" IFS="***" read -ra IPArray <<< "$STR" echo ${#IPArray[@]}
IFS указывает разделяющие символы, а не строку. IFS="***" означает * или * или *.
IFS="***"
Таким образом, вы можете изменить его без IFS:
STR="1.1.1.1***2.2.2.2" STR2=$(echo $STR | tr '*' ' ') read -ra IPArray <<< "$STR2" echo ${#IPArray[@]}
IFS рассматривает каждый символ как разделитель. https://bash.cyberciti.biz/guide/$IFS Вот почему вы получаете размер массива 4 в вашем коде. Вы должны использовать регулярное выражение для использования строки в качестве IFS.