: hunandy14: 其實真實的情況是 pwsh 社群決議改掉預設萬用了
: hunandy14: 他不是bug就是當初設計 不符合直覺
: hunandy14: 所以應該不會修了,那是式樣不是bug
: hunandy14: 測試結果確實沒有bug存在,只是惱人的設計
bug 是指對於萬元字元路徑的跳脫處理有誤
預設萬元字元我只當它是反人類設計而已
https://github.com/PowerShell/PowerShell/issues/7999
主要是講這 bug 的影響
順便提了兩句微軟的雞婆的
設計導致多餘的困擾,不是本篇的重點
由於 -like 運算子跟 cmdlet 的路徑參數
對於萬用字元的解讀不同
這兩者都是 PowerShell 原生的功能
對於同樣的東西應該有相同行為
所以說,在這問題上最多只能有一方是正確的
https://i.imgur.com/YiXffzL.png
如過這是特性不是 bug 的話
那工作目錄中的特殊字元應該要做獨特的跳脫處理
畢竟這是在 cmdlet 內部處理的
不應該發生錯誤
Set-Location -LiteralPath 'D:\test`[0-2]'
Resolve-Path -Path .
Resolve-Path -LiteralPath .
使用 -Path . 與使用 -LiteralPath .
前者在任何版本都會發生錯誤
則只有在新的跨平台版 PS 才能得到正確路徑
https://i.imgur.com/m5uoXdF.png
另外,我不是說管線那設計是 bug
bug 是指在這個工作目錄把程式作為命令執行
會因為因為工作目錄路徑導致異常行為
https://i.imgur.com/mbG9jTo.png
Start-Process 有 -WorkingDirectory 可以用
它會直接拿你跳脫處理過的路徑當 base 去組出完整路徑
就能避開對於工作目錄路徑本身包含 ` 時的問題
而 System.Diagnostics.Process 不是 PS 的 cmdlet 所以沒此問題
拿 Start-Process 舉例,只因為它是 PowerShell 的 Cmdlet