ファイルに入力のエントリがあるかどうかを確認しようとしているので、正規表現を使用して各行をクエリしています。
cat $file | where {$_ -match "^script\$fileName -*"}
ここで、$fileNameは他の場所で定義された入力です。
'$ fileName'に一致する代わりに、変数を補間するように正規表現を変更するにはどうすればよいですか?
ファイルに入力のエントリがあるかどうかを確認しようとしているので、正規表現を使用して各行をクエリしています。
cat $file | where {$_ -match "^script\$fileName -*"}
ここで、$fileNameは他の場所で定義された入力です。
'$ fileName'に一致する代わりに、変数を補間するように正規表現を変更するにはどうすればよいですか?
与えられた答えに加えて、$fileNameには「。」などの文字を含めることができます。または'\'次のようにエスケープする必要があります。
cat $file | where {$_ -match "^script\\$([regex]::Escape($fileName)) -*"}
Escapeメソッドは、「。」のようなビットをエスケープします。そしてあなたのために。
例えば
[regex]::Escape(".\bar.txt")
与える
\.\\bar\.txt
$fileName
補間されるので、次のような正規表現に渡される文字列になります。
cat $file | where {$_ -match "^script\foo.txt -*"}
は\
、実際にリターナル\
を照合したいときに、次の文字のエスケープ文字として機能します。この場合、エスケープ文字をエスケープする必要があります。例:
cat $file | where {$_ -match "^script\\$fileName -*"}
PowerShell内で正規表現を分割することも可能です。
$fileName = 'test'
'^script\test-*' -match ('\^script\\' + $fileName + '-*')
より読みやすく、変数に角かっこが含まれる多次元配列で機能します[]
$fileName = New-Object object[][] 1
$fileName[0] = @('test')
'^script\test-*' -match ('\^script\\' + $fileName[0][0] + '-*')