PowerShell에서 배열 객체를 문자열로 어떻게 변환합니까?


175

배열 객체를 문자열로 어떻게 변환 할 수 있습니까?

나는 시도했다 :

$a = "This", "Is", "a", "cat"
[system.String]::Join(" ", $a)

운없이 . PowerShell에서 다른 가능성은 무엇입니까?


5
내 대답을 참조하십시오. 그러나 코드도 제대로 작동합니다. "운이없는"이유는 무엇입니까?
Roman Kuzmin

4
미안, 예, 작동하는 것 같습니다. 이것을 테스트 할 때 무언가를 엉망으로 생각합니다.
jrara

답변:


294
$a = 'This', 'Is', 'a', 'cat'

큰 따옴표 사용 (및 선택적으로 구분 기호 사용 $ofs)

# This Is a cat
"$a"

# This-Is-a-cat
$ofs = '-' # after this all casts work this way until $ofs changes!
"$a"

연산자 결합 사용

# This-Is-a-cat
$a -join '-'

# ThisIsacat
-join $a

로 변환 사용 [string]

# This Is a cat
[string]$a

# This-Is-a-cat
$ofs = '-'
[string]$a

9
시작되지 않은 (나처럼) 여기$ofs 에 문서화되어 있습니다
Liam

13
Stackoverflow Documentation이 종료되었으므로 Liam의 연결이 끊어졌습니다. 여기서 $ OFS, 출력 필드 분리의 또 다른 설명입니다 : blogs.msdn.microsoft.com/powershell/2006/07/15/...은
사이먼 Tewsi

왜 OFS라고 불리는가? 수십 년 동안 표준 쉘에서 IFS라고 불렀다는 것을 고려하면 이상한 이름입니다.
Johan Boulé

1
@ JohanBoulé : Input Field Separator의 첫 번째 문자를 Output Field Separator로 사용하는 것은 힘든 일이며 여러 문자 문자열로 필드를 분리하는 것을 허용하지 않습니다. 예를 들어, FS 및 OFS 변수가 있습니다.
Martin Bonner는 Monica

@ martin bonner : 고마워요. 나는 이것을 어떻게 망쳤는지 모른다.
Johan Boulé

36

배열을 Out-Stringcmdlet으로 파이프하는 것도 잘 작동 한다는 것을 알았 습니다.

예를 들면 다음과 같습니다.

PS C:\> $a  | out-string

This
Is
a
cat

어떤 방법이 가장 적합한 지 최종 목표에 달려 있습니다.


4
참고 : 그렇게하는 $a$a | out-string
JohnLBevan

7
@JohnLBevan 항상 그런 것은 아닙니다. ($a | out-string).getType()= 문자열. $a.getType()= 객체 []. 문자열을 기대하는 메소드에 대한 인수로 $ a를 사용하는 경우 (예 invoke-expression를 들어) $a | out-string분명한 이점이 있습니다.
rojo

18
1> $a = "This", "Is", "a", "cat"

2> [system.String]::Join(" ", $a)

두 번째 줄은 작업을 수행하고 호스트로 출력하지만 $ a는 수정하지 않습니다.

3> $a = [system.String]::Join(" ", $a)

4> $a

This Is a cat

5> $a.Count

1

10

파이프에서

# This Is a cat
'This', 'Is', 'a', 'cat' | & {"$input"}

# This-Is-a-cat
'This', 'Is', 'a', 'cat' | & {$ofs='-';"$input"}

쓰기 호스트

# This Is a cat
Write-Host 'This', 'Is', 'a', 'cat'

# This-Is-a-cat
Write-Host -Separator '-' 'This', 'Is', 'a', 'cat'


이것은 놀라운 속임수입니다. 예제는 더 이상 작동하지 않으며이 답변이 5 살이더라도 오늘 배운 내용을 설명하려고합니다. 는 $ofsOutput Field Separator배열이 출력 문자열로 변환 할 때 사용되는 변수. 여기서는 스크립트 블록에서 명령에 의해 실행되는 입력 (파이프에서 배열)의 문자열 값을 반환합니다 &. 나는 약 몰랐 $ofs뿐만 아니라, 이전 &인수로 스크립트 블록 수용
마틴 Konopka 보낸

3

다음과 같이 유형을 지정할 수 있습니다.

[string[]] $a = "This", "Is", "a", "cat"

유형 확인 :

$a.GetType()

확인합니다 :

    IsPublic IsSerial 이름 BaseType
    -------- -------- ---- --------
    True True String [] System.Array

$ a 출력 :

PS C : \> $ a 
이 
입니다 
ㅏ 
고양이

0
$a = "This", "Is", "a", "cat"

foreach ( $word in $a ) { $sent = "$sent $word" }
$sent = $sent.Substring(1)

Write-Host $sent
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.