2015-01-21 15 views
2

我正在写一个脚本,它需要带'〜'分隔符的参数,并且在分割字符串之后我想将值插入到数组中。我在这个问题上有不少帖子,我几乎在那里,但有一个失败的情况。这里是细节。当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个参数,而是想要将数据作为一个参数按指定顺序由一个字符分隔。

感谢

+0

也许如果你包含更多关于你最终想达到什么的信息,我们可以给你提供一些替代方案。 – 2015-01-21 11:15:34

+0

@TomFenech更新了问题。 – NikosDim 2015-01-21 11:34:54

+1

将10个参数添加到您的脚本并拥有一个参数但自己将其分开的情况有什么区别?你只需要执行'./myScript.sh A B'并通过'$ 1'和'$ 2'访问你的参数。如果你做了'./myScript.sh A''',甚至只是'./myScript.sh A',那么'$ 2'就是空的。 – 2015-01-21 11:51:40

回答

0

使用./script "A~ "那么最后一个元素是 “空”。

+0

在这种情况下,它不会是一个空字符串,而是一个空格字符,它不是我想要的。输入参数将来自其他应用程序,所以有一个空间不适合我。感谢 – NikosDim 2015-01-21 11:12:36

+0

然后可能修剪后访问元素。我认为bash不会处理/得到最后一个元素,如果在'./script“A〜”'中没有。 – 2015-01-21 11:15:42

+0

为了在最后得到空格字符,我必须在所有看起来不正确的客户端中添加此登录名。如果不可能,那么我将不得不采取完全不同的道路。 :( – NikosDim 2015-01-21 11:21:42

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)一次。