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[@]}
以下 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[@]}