我正在编写一个带有'〜'分隔符的参数的脚本,在分割字符串之后我想将值插入到数组中。我有很多关于这个问题的帖子,我几乎就在那里但是有一个失败的情况。这是详细信息。
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个参数,而是考虑将数据作为一个参数,以指定的顺序由一个字符分隔。
由于
答案 0 :(得分:3)
~
的处理类似于表达式中的空格,因此使用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)
相同。
答案 1 :(得分:0)
使用./script "A~ "
,然后最后一个元素为“空”。