2016-06-10 2 views
3

$dlls.Count이 단일 요소를 반환하는 이유는 무엇입니까? 나는 같은 문자열 내 배열을 선언하려고 : 나는 그것을 발견문자열 배열을 선언하는 방법 (여러 줄로)

$basePath = Split-Path $MyInvocation.MyCommand.Path 

$dlls = @(
    $basePath + "\bin\debug\dll1.dll", 
    $basePath + "\bin\debug\dll2.dll", 
    $basePath + "\bin\debug\dll3.dll" 
) 
+0

[PowerShell 어레이 초기화] (http://stackoverflow.com/questions/226596/powershell-array-initialization)의 가능한 복제본 –

답변

4

(예 : this one 등) 거의 모든 소스에 따라 것 : 답안에서 볼 수 있듯이

$dlls = @(
    ($basePath + "\bin\debug\dll1.dll"), 
    ($basePath + "\bin\debug\dll2.dll"), 
    ($basePath + "\bin\debug\dll3.dll") 
) 

or 

$dlls = @(
    $($basePath + "\bin\debug\dll1.dll"), 
    $($basePath + "\bin\debug\dll2.dll"), 
    $($basePath + "\bin\debug\dll3.dll") 
) 

를, 세미콜론은 또한 자국 때문에 작업 명령문의 끝은 괄호를 사용하는 것과 비슷하게 평가됩니다. 따라서,

경로를 빗질하는 PowerShell array initialization

+0

괜찮습니다. 왜 그들이 구문을 그렇게 혼란스럽게 만들었습니까 ... – ibiza

1

, 내가 세미콜론 대신 쉼표의 ... 사람이 이유를 설명 할 수 사용해야합니다?

그것은 분명 쉼표 당신은 같은 것을 사용한다

$basePath = Split-Path $MyInvocation.MyCommand.Path 

$dlls = @(
    $basePath + "\bin\debug\dll1.dll"; 
    $basePath + "\bin\debug\dll2.dll"; 
    $basePath + "\bin\debug\dll3.dll"; 
) 
2

보기 ...

$dlls = @() 
$dlls += "...." 

그러나 당신은 ArrayList를 사용하고 성능 이점을 얻을 수도 있습니다 :

또는 같은 다른 패턴을 사용 Join-Path cmdlet을 사용하십시오.

$dlls = @(
    Join-Path $basePath '\bin\debug\dll1.dll' 
    Join-Path $basePath '\bin\debug\dll2.dll' 
    Join-Path $basePath '\bin\debug\dll3.dll' 
) 

쉼표, 세미콜론 또는 괄호를 사용할 필요가 없습니다. this answer도 참조하십시오.

+0

아. 쉼표는 왜 선택입니까? powershell이 ​​일관된 구문을 사용하지 않는 이유는 무엇입니까? 이것은 좀 더 혼란스러운 권력이다. – ibiza

관련 문제