通过delim将字符串拆分为数组时不包括最后一个空字符串

时间:2015-01-21 10:59:43

标签: linux bash shell string-split

我正在编写一个带有'〜'分隔符的参数的脚本,在分割字符串之后我想将值插入到数组中。我有很多关于这个问题的帖子,我几乎就在那里但是有一个失败的情况。这是详细信息。

myScript.sh

#!/bin/bash
tmpIFS=$IFS
IFS="~"
array=($1)
IFS=$tmpIFS
echo "${#array[@]}"

处决

$ ./myScript.sh "A~B"
$ 2

这就是我想要的。但是当我做的时候

$ ./myScript.sh "A~"
$ 1

我原本希望有一个大小为2的数组,最后一个单元格是一个空字符串。

我怎样才能做到这一点?

我试图通过这个脚本实现的目的是通过在其中传递10个查询参数来使用curl执行http请求。我没有为我的脚本提供10个参数,而是考虑将数据作为一个参数,以指定的顺序由一个字符分隔。

由于

2 个答案:

答案 0 :(得分:3)

~的处理类似于表达式中的空格,因此使用shell扩展规则时行为很有意义。您可以使用以下解决方法:

array=($1"")

要了解其工作原理,请考虑使用空格(未更改IFS):假设$1A B C,则

array=($1)

扩展为

array=(A B C )

这是一个包含三个元素的数组。另一方面,

array=($1"")

扩展为

array=(A B C "")

有四个。如果$1末尾没有空格,则会扩展为

array=(A B C"")

再次与(A B C)相同。

答案 1 :(得分:0)

使用./script "A~ ",然后最后一个元素为“空”。