下面的比較在 PowerShell 中給出了錯誤的結果,希望它是真的。` 運算子導致它為假,而對于任何其他特殊字符,它回傳真。
> 'abc`@01' -like 'abc`@01'
False
uj5u.com熱心網友回復:
-like是通配符比較運算子,`是通配符轉義序列。
PS ~> 'abc`@01' -like 'abc``@01'
True
使用-eq如果你想要一個確切的字串比較,而不必有關轉義參考串的擔心:
PS ~> 'abc`@01' -eq 'abc`@01'
True
uj5u.com熱心網友回復:
要添加到 馬蒂亞斯R.杰森的有用的答案:
有時你可能會被處理字串應該成為部分A的通配符運算式,但本身應被視為從字面上,這需要逃避通配符元字符* ? [ ] `,用`。
[WildcardPattern]::Escape()允許您以編程方式執行此轉義(如果字串是從外部傳遞的,這尤其有用),如以下示例所示:
# The value to use *literally* as part of a wildcard expression below.
$literalValue = '[1]'
# Escape it for use in the wildcard expression.
# -> '`[1`]'
$escapedValue = [WildcardPattern]::Escape($literalValue)
'file[1]' -like ('*' $escapedValue) # -> $true
遺憾的是,從 PowerShell Core 7.2.0-rc.1 開始,存在一個bug:`它本身,甚至認為它應該被轉義為``,但沒有被轉義,Mathias 在GitHub 問題 #16306 中報告了這一點。
換句話說:使用您問題中的特定通配符模式,這種技術將不起作用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/338513.html
