bash returns 中的字符串分隔符加倍大小

string split delimiter in bash returns double the size

以下 bash 脚本 returns 4 而它应该是 2 即 2 IPS。

#!/bin/bash

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

IFS 将每个字符视为分隔符。 https://bash.cyberciti.biz/guide/$IFS 这就是为什么您在代码中将数组大小设置为 4 的原因。 您应该使用 regexp 将字符串用作 IFS。

IFS 表示分隔符,不是字符串。 IFS="***"表示*或*或*。

所以不用IFS也可以修改:

STR="1.1.1.1***2.2.2.2"
STR2=$(echo $STR | tr '*' ' ')
read -ra IPArray <<< "$STR2"
echo ${#IPArray[@]}