包含元字符的变量的Bash数组

时间:2017-06-22 14:19:58

标签: arrays bash metacharacters

我尝试从包含语义版本控制约束的字符串创建数组,该约束由(n个可选的)比较运算符(例如~>),空格和版本号组成(例如1.0.0)。我想从这个字符串创建一个数组,其中element [0]包含比较运算符,元素[1]包含版本(或者如果没有比较运算符,则包含元素版本的单个成员数组) [0])。

所需结果,输入字符串为 ~> 1.0.0

$ echo ${array[@]}
~> 1.0.0
$ echo ${array[0]}
~>
$ echo ${array[1]}
1.0.0

但是我在创建数组时遇到了问题,因为比较运算符可以包含元字符(例如我的示例中的>)。

以下是我通常的做法。 这有效:

$ array=(== 1.0.0)
$ echo ${array[@]}
== 1.0.0
$ echo ${array[0]}
==
$ echo ${array[1]}
1.0.0

然而,这些不起作用:

$ array=(~> 1.0.0)
-bash: syntax error near unexpected token `>'

$ array=("~> 1.0.0")
$ echo ${array[@]}
~> 1.0.0
$ echo ${array[0]}
~> 1.0.0
$ echo ${array[1]}

我知道以下工作,但遗憾的是我不能改变我的输入字符串来引用比较运算符:

$ array=("~>" 1.0.0)
$ echo ${array[@]}
~> 1.0.0
$ echo ${array[0]}
~>
$ echo ${array[1]}
1.0.0

如何在不改变输入字符串的情况下从此输入字符串创建数组?

1 个答案:

答案 0 :(得分:0)

我在点击后立即想到了解决方案。我可以将其设置为带引号的bash变量,而不是将我的字符串直接输入到数组声明中。 shell将评估变量,但不会评估元字符:

$ variable="~> 1.0.0"
$ array=(${variable})
$ echo ${array[@]}
~> 1.0.0
$ echo ${array[0]}
~>
$ echo ${array[1]}
1.0.0