"if"お問い合わせ正規表現とワイルドカード

"if"お問い合わせ正規表現とワイルドカード

if私のステートメントには正規表現とワイルドカードを使用しています。

例:

  [[ "$exitfn" =~ ^[yY]*$ ]] && return
  [[ "$exitfn" == "[yY]*" ]] && return
  [[ "$exitfn" == "*$fs*" ]] && return
  [[ "$exitfn" == *$fs* ]] && return

*$fs*"しかし、引用または引用しないと、どのような問題が発生するのか本当に知りたいです*$fs*

=~どのように使用するのだろうか==

答え1

==または!=内部は次の[[...]]とおりです。グローバルモード- そして文字列恒等演算子ではありません==!=パターンマッチングオペレーター。

正規表現またはグローバルパターンで引用された部分は、リテラルテキストとして扱われます。

[[ "$exitfn" =~ ^[yY]*$ ]] && return
  • 期待どおりに動作します。
[[ "$exitfn" == "[yY]*" ]] && return
  • 変数がリテラルの場合にのみ返します。[yY]*
[[ "$exitfn" == "*$fs*" ]] && return
  • 変数にアスタリスクの後にアスタリスクが続くものが含まれている場合にのみ$fs返されます。
[[ "$exitfn" == *$fs* ]] && return
  • 期待どおりに動作するはずです。〜しない限り拡張は$fsglob式で一致させることができます。
    • たとえば、if then returnは、3文字以上を含む場合にfs='???'returnを実行します。$exitfn

長すぎます。- あなたが望む

  [[ "$exitfn" == *"$fs"* ]] && return

関連情報