2017-06-22 8 views
1

(nオプションの)比較演算子(例えば、~>)、スペース、およびバージョン番号(例:~>)からなる意味的バージョン管理制約を含む文字列から配列を作成しようとしています。 1.0.0)。私はこの文字列から、比較演算子を含む要素[0]と、バージョンを含む要素[1](または、比較演算子がない場合、要素[0 ])。入力文字列が~> 1.0.0あるメタ文字を含む変数のBash配列

望ましい結果、:

$ 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

投稿を打った直後の解決策を考えました。私の文字列を配列宣言に直接入力するのではなく、引用符付きのbash変数として設定することができます。シェルは変数を評価しますが、メタキャラクタを評価しません。

$ variable="~> 1.0.0" 
$ array=(${variable}) 
$ echo ${array[@]} 
~> 1.0.0 
$ echo ${array[0]} 
~> 
$ echo ${array[1]} 
1.0.0 
関連する問題