bash中的字符串拆分定界符返回大小的两倍

时间:2019-05-08 04:15:22

标签: bash split delimiter

以下bash脚本返回4,而应为2,即2 IPS。

#!/bin/bash

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

2 个答案:

答案 0 :(得分:2)

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

因此您可以在不使用IFS的情况下对其进行修改:

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

答案 1 :(得分:1)

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