2017-12-19 12 views
0

는 기능을 감안할 때 : function log2 {param ([double]$x) [Math]::Log($x)/[Math]::Log(2) } Powershell이 ​​log2 45/120을 log2 "45/120"으로 해석하는 이유는 무엇입니까?

예상 : Cannot process argument transformation on parameter 'x'. Cannot convert value "45/120" to type "System.Double". Error: "Input string was not in a correct format." At line:1 char:6 + log2 45/120 + ~~~~~~ + CategoryInfo : InvalidData: (:) [log2], ParameterBindingArgumentTransformationException + FullyQualifiedErrorId : ParameterArgumentTransformationError,log2 왜 즉 : log2 45/120 실제 -1.41503749928

양보해야합니까?

Uservoice

+1

아니 버그, https://docs.microsoft.com/en-us ([이것은 의도적으로 설계된 동작입니다] /powershell/module/microsoft.powershell.core/about/about_parsing?view=powershell-5.1) –

답변

0

PowerShell은 알 수없는 명령에 대한 인수가 평가 식 또는 문자열 있어야하는데, 그래서 문자열을 선택대로 45/100 경우. 이것은 명령에 대한 인수를 유지하기 위해서입니다. 문자열을 double로 변환하려고 시도하고 숫자 문자열이 아니기 때문에 문자열을 double로 변환 할 수 없습니다. 예를 들어

, 내가이 명령을 입력 :

그것이 Get-Value에 전달하기 전에 PowerShell을 12/19/2017와 함께 무엇을해야
Get-Value 12/19/2017 

? 가장 안전한 대답은 입니다.입니다. Get-Value이 변환하려고하면 커맨드 라인 파서의 작업이 아닙니다.

Get-Value (12/19/2017) 
Get-Value "12/19/2017" 

그러나 PowerShell은 모든 것을 커버하는 합리적인 기본이 있어야하고, 그들이가로 지정하지 않는 한 그들은 문자열로 모든 리터럴 인수 토큰을 치료하기 위해 선택한 :

예,이 명시되어 표현식은 괄호로, 서브 표현식은 $()으로, 경우에 따라 {}으로 스크립트 블록을 사용합니다.

다른 예가 있습니다. 이 전 4로 시작 .000의 확장자를 가진 모든 파일을한다고 가정하자 1로 끝 :

Get-ChildItem 4*1.000