我尝试从包含语义版本控制约束的字符串创建数组,该约束由(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
如何在不改变输入字符串的情况下从此输入字符串创建数组?
答案 0 :(得分:0)
我在点击后立即想到了解决方案。我可以将其设置为带引号的bash变量,而不是将我的字符串直接输入到数组声明中。 shell将评估变量,但不会评估元字符:
$ variable="~> 1.0.0"
$ array=(${variable})
$ echo ${array[@]}
~> 1.0.0
$ echo ${array[0]}
~>
$ echo ${array[1]}
1.0.0