我正在编写一个脚本,该脚本采用带有"~"分隔符的参数,并且在拆分字符串后,我想将值插入数组中。我有很多关于这个问题的帖子,我几乎就在那里,但有一个案例它失败了。以下是详细信息。
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
):假设$1
是A B C
,然后
array=($1)
扩展到
array=(A B C )
这是一个由三个元素组成的数组。另一方面
array=($1"")
扩展到
array=(A B C "")
其中有四个。如果$1
末尾没有空格,则扩展为
array=(A B C"")
这和(A B C)
一样。
使用./script "A~ "
则最后一个元素为"空"。