2017-06-22 6 views
1

Ich versuche, ein Array aus einer Zeichenfolge zu erstellen, die eine semantische Versionsbeschränkung enthält, die aus einem (n optionalen) Vergleichsoperator (z. B. ~>), einem Leerzeichen und einer Versionsnummer (z 1.0.0). Ich möchte ein Array aus dieser Zeichenfolge erstellen, wobei das Element [0] den Vergleichsoperator und das Element [1] die Version enthält (oder wenn es keinen Vergleichsoperator gibt, ein einzelnes Elementarray, das die Version bei Element [0 enthält ]).Bash-Array aus Variable, die Metazeichen enthält

Wunscher, wobei die Eingabezeichenfolge ist~> 1.0.0:

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

Aber ich bin ein Problem mit dem Array zu schaffen, weil der Vergleichsoperator kann Metazeichen enthalten (z > von meinem Beispiel).

Hier ist, wie ich in der Regel würde es tun. Dies funktioniert:

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

jedoch diese nicht funktionieren:

$ 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]} 

Ich weiß, dass die folgenden würde Arbeit, aber ich kann leider nicht meine Eingabezeichenfolge ändern, um den Vergleich zu zitieren Bediener:

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

Wie kann Ich erstelle ein Array von dieser Eingabezeichenfolge, ohne es zu ändern?

Antwort

0

Ich dachte an die Lösung unmittelbar nach der Post zu treffen. Anstatt meine Zeichenfolge direkt in die Array-Deklaration einzugeben, kann ich sie als eine quotierte Bash-Variable festlegen. Die Schale wird die Variable auswerten, sondern wird das metacharacter nicht bewerten:

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