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



我正在编写一个脚本,该脚本采用带有"~"分隔符的参数,并且在拆分字符串后,我想将值插入数组中。我有很多关于这个问题的帖子,我几乎就在那里,但有一个案例它失败了。以下是详细信息。

myScript.sh

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

执行

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

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

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

我期待再次有一个大小为 2 的数组,最后一个单元格是一个空字符串。

我怎样才能做到这一点?

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

谢谢

~

表达式中像空格一样处理,因此该行为对于 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)一样。

使用./script "A~ "则最后一个元素为"空"。

最新更新