2つの変数パターンを一度に確認する

2つの変数パターンを一度に確認する

2つの変数が1つずつ一致するのではなく、正規表現パターンと同時に一致することを確認できますか?これで、次のように動作します。

# A=1.1
# B=1.2
# [[ $A =~ ^([0-9]+(\.([0-9]+(\.([0-9]+))?))?)$ && $B =~ ^([0-9]+(\.([0-9]+(\.([0-9]+))?))?)$ ]] && echo A:$A B$B
A:1.1 B1.2
# B=1.2.3
# [[ $A =~ ^([0-9]+(\.([0-9]+(\.([0-9]+))?))?)$ && $B =~ ^([0-9]+(\.([0-9]+(\.([0-9]+))?))?)$ ]] && echo A:$A B$B
A:1.1 B1.2.3
# B=1.2.3.4
# [[ $A =~ ^([0-9]+(\.([0-9]+(\.([0-9]+))?))?)$ && $B =~ ^([0-9]+(\.([0-9]+(\.([0-9]+))?))?)$ ]] && echo A:$A B$B
#

動作しないこのテストのように、両方を同時にテストしたいと思います。

# [[ ($A|$B) =~ ^([0-9]+(\.([0-9]+(\.([0-9]+))?))?)$ ]] && echo A:$A B$B
-bash: unexpected token `|', conditional binary operator expected
-bash: expected `)'
-bash: syntax error near `|$'
#

ベストアンサー1

残念ながら、あなたはそうすることはできません。=~演算子inの左側はbash文字列です(そして正しく引用する必要があります)。必要に応じて、2つの文字列(2つの文字列の連結など)を一致させる正規表現を作成できますが、そうするとコードの読み取りと維持が難しくなり、結果が得られない可能性があります。スピードそれから(それがあなたが求めているものなら)。

&&また、2つのテストに中間を使用する場合は、最初のテストの右側に何が含まれ、2番目のテストの左側に何が含まれているかを明確にするために代わりに[[ ... ]] && [[ ... ]]使用することを検討してください。[[ ... && ... ]]

おすすめ記事