none
正規表現と変数展開 RRS feed

  • 質問

  • powershellでの変数展開について知りたいのですが、
    ダブルクォーテーション内の変数は展開される
    ダブルクォーテーション内で、バッククオートでエスケープ
    シングルクォーテーションの変数は文字列

    最後がTrueになっても良さそうなのですがなぜ、Falseとなるのでしょうか。

    PS C:\>  "`$test"
    $test
    PS C:\> '$test'
    $test
    PS C:\>  "`$test" -match '$test'
    False

    また、変数展開ですが次の書き方以外に方法はありますか。

    $test[g]hのgの書き方です。

    PS C:\> $test = "def"
    PS C:\> "abcdefghijk" -match "$test[g]h"  
    True

    2021年4月14日 7:07

回答

すべての返信

  • -matchは正規表現でマッチングを行いますが、正規表現において文字 $ は行末を意味するメタ文字なので、テスト文字列 $test に対してはマッチしません。

    エスケープするにはバックスラッシュを $ の前に付けて -match '\$test' のようにします。あるいは -match [regex]::Escape('$test') とします。

    変数展開のほうは質問内容が良く読み取れませんでした。gの書き方とは?
    • 編集済み Hongliang 2021年4月14日 7:24
    2021年4月14日 7:23
  • PS C:\..\system32>  "`$test" -eq '$test'
    True

    正規表現を意識していたのですが、忘れていました。

    ありがとうございました。

    変数展開のほうですが、"$testgh" だと $testgh変数を展開してしまうので、
    []文字クラスを使用したのですが、
    POWERSHELLならではの記述方法があるのかなと思い質問させていただきました。

    2021年4月14日 8:12
  • その場合であれば、"$($test)gh" のように $() を使うぐらいでしょうか。

    // "$test$()hg" でも可。

    • 回答としてマーク Brillia 2021年4月15日 2:26
    2021年4月14日 10:21
  • "${test}gh"

    のように、${変数名}という記法を用いれば、変数をスペースや記号で区切ることなく、文字列リテラルに含めることができます。

    (参考:about_Variables - PowerShell | Microsoft Docs

    • 回答としてマーク Brillia 2021年4月15日 2:26
    2021年4月14日 10:46
    モデレータ