programing

PowerShell이 빈 배열을 배열로 반환하지 않음

abcjava 2023. 7. 30. 16:47
반응형

PowerShell이 빈 배열을 배열로 반환하지 않음

이것이 효과가 있다는 것을 고려할 때:

$ar = @()
$ar -is [Array]
  True

왜 안 되는 거지?

function test {
    $arr = @()
    return $arr
}

$ar = test
$ar -is [Array]
  False

즉, 테스트 기능에서 빈 배열이 반환되지 않는 이유는 무엇입니까?

PowerShell이 단순히 인수만 반환하는 것이 아니라 캡처되지 않은 모든 스트림 출력을 반환하기 때문에 기능이 작동하지 않습니다.return진술.빈 배열이 다음으로 분할됩니다.$null그 과정에서그러나 배열 구성 연산자()를 추가하여 반환 시 배열을 보존할 수 있습니다.,):

function test {
  $arr = @()
  return ,$arr
}

write-output $arr파이크는 그냥 쓰는 것과 같습니다.$arr그래서 기능은 여전히 되돌아옵니다.$null.

그렇지만 write-output선택권이 있습니다.-NoEnumerate즉, 비어 있는 배열은 열거되지 않으며, 비어 있기 때문에 무시됩니다.결과는 빈 배열입니다.

인정하건대 위의 대답은 ...보다 훨씬 짧습니다.

 function test {
     $arr = @()
     write-output $arr -NoEnumerate 
 }
 (test) -is [array]  ## $True

"prepend '," 솔루션에서 명심해야 할 또 다른 사항은 나중에 데이터를 직렬화하려는 경우 몇 가지 문제가 발생한다는 것입니다.무엇을,어떤 변수를 추가하든 배열로 묶는 것이 실제로 수행되는 것으로 보입니다.$null된다[],"test"된다["test"]하지만...["foo","bar"]된다[["foo","bar"]]연쇄 살인의 관점에서 보면 분명히 문제가 되는 겁니다

언급URL : https://stackoverflow.com/questions/18476634/powershell-doesnt-return-an-empty-array-as-an-array

반응형