Разделитель строк в bash возвращает удвоенный размер - PullRequest
0 голосов
/ 08 мая 2019

Следующий скрипт bash возвращает 4, а должно быть 2, то есть 2 IPS.

#!/bin/bash

STR="1.1.1.1***2.2.2.2"
IFS="***" read -ra IPArray <<< "$STR"
echo ${#IPArray[@]}

Ответы [ 2 ]

2 голосов
/ 08 мая 2019

IFS указывает разделяющие символы, а не строку. IFS="***" означает * или * или *.

Таким образом, вы можете изменить его без IFS:

STR="1.1.1.1***2.2.2.2"
STR2=$(echo $STR | tr '*' ' ')
read -ra IPArray <<< "$STR2"
echo ${#IPArray[@]}
1 голос
/ 08 мая 2019

IFS рассматривает каждый символ как разделитель. https://bash.cyberciti.biz/guide/$IFS Вот почему вы получаете размер массива 4 в вашем коде. Вы должны использовать регулярное выражение для использования строки в качестве IFS.

...