对于IFS只有一个字符,它工作得很好:

shell@kernel: ~> l="2.4.3"; IFS="." read -a la <<< "$l"; for ((i = 0; i < ${#la[@]}; ++i)) do echo ${la[$i]}; done;
2
4
3

如果IFS有两个字符,则生成额外的空间元素
shell@kernel: ~> l="2->4->3"; IFS="->" read -a la <<< "$l"; for ((i = 0; i < ${#la[@]}; ++i)) do echo ${la[$i]}; done;
2

4

3
shell@kernel: ~> l="2..4..3"; IFS=".." read -a la <<< "$l"; for ((i = 0; i < ${#la[@]}; ++i)) do echo ${la[$i]}; done;
2

4

3

如何去掉数组中多余的空间元素?

最佳答案

从注释继续,可以在将值存储到数组中之前测试空元素,也可以在echo时处理空值。坦率地说,做后者比较简单。

l="2->4->3"; IFS="->" read -a la <<< "$l"; \
for ((i = 0; i < ${#la[@]}; ++i)) do \
[ -n "${la[i]}" ] && echo ${la[$i]}; done

输出
2
4
3

关于arrays - 如何使用bash中的IFS单词分隔符通过“读取”将字符串拆分为数组,从而生成额外的空格元素?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40011867/

10-11 18:55