如何使用bash中的IFS单词分隔符通过“读取"将字符串拆分为数组,从而生成额外的空格元素? [英] How does splitting string to array by 'read' with IFS word separator in bash generated extra space element?

查看:147
本文介绍了如何使用bash中的IFS单词分隔符通过“读取"将字符串拆分为数组,从而生成额外的空格元素?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

IFS只有一个字符,可以正常工作:

With only one character for IFS, it works fine:

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有两个字符,但生成了额外的空格元素

While there are two characters for IFS, extra space element generated

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

如何摆脱数组中多余的空格元素?

How can I get rid of the extra space element in the array?

推荐答案

从注释继续,您可以在将值存储到数组之前测试空元素,或者在它.坦白说,例如,后者更简单

Continuing from the comment, you can either test for an empty element before storing the value in the array, or you can deal with the empty value when you echo it. Frankly, its simpler to do the latter, e.g.

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

这篇关于如何使用bash中的IFS单词分隔符通过“读取"将字符串拆分为数组,从而生成额外的空格元素?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆