Bir dizi nesnesini PowerShell'de bir dizeye nasıl dönüştürebilirim?


176

Bir dizi nesnesini dizeye nasıl dönüştürebilirim?

Denedim:

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

şanssız . PowerShell'de farklı olasılıklar nelerdir?


5
Cevabımı gör ama kodun da iyi çalışıyor. Neden "şanssız" diyorsun?
Roman Kuzmin

4
Üzgünüm, evet, işe yarıyor gibi görünüyor, sanırım bunu test ettiğimde bir şeyler berbat ettim.
jrara

Yanıtlar:


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

Çift tırnak işareti kullanma (ve isteğe bağlı olarak ayırıcıyı kullanma $ofs)

# This Is a cat
"$a"

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

Operatör birleştirmeyi kullanma

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

# ThisIsacat
-join $a

Dönüşümünü kullanarak [string]

# This Is a cat
[string]$a

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

9
Başlatılmamış (benim gibi) burada$ofs belgelenmiştir
Liam

13
Stackoverflow Dokümantasyon kapatıldı, bu yüzden Liam'ın bağlantısı öldü. $ OFS, Çıkış Alanı Ayırıcı için başka bir açıklama: blogs.msdn.microsoft.com/powershell/2006/07/15/…
Simon Tewsi

Neden OFS deniyor? On yıllardır onlarca yıldır standart kabukta IFS olarak adlandırıldığını düşünmek garip bir isim.
Johan Boulé

1
@ JohanBoulé: Çünkü Çıktı Alanı Ayırıcısının ilk karakterini Çıktı Alanı Ayırıcısı olarak kullanmak kötü bir hacktir ve çok karakterli dizelerle alanların ayrılmasına izin vermez. (Awk örneğin FS ve OFS değişkenlerine sahiptir).
Martin Bonner, Monica

@martin bonner: teşekkürler, şimdi mantıklı. Bunu nasıl berbat ettiğimi bilmiyorum.
Johan Boulé

36

Ben dizi Out-Stringcmdlet boru çok iyi çalışır bulundu .

Örneğin:

PS C:\> $a  | out-string

This
Is
a
cat

Hangi yöntemin en iyi şekilde kullanılacağı ile ilgili nihai hedefinize bağlıdır.


4
Bilginize: sadece yapmak$a$a | out-string
JohnLBevan

7
@JohnLBevan Her zaman değil. ($a | out-string).getType()= Dize. $a.getType()= Nesne []. $ A'yı bir dize (örneğin gibi invoke-expression) bekleyen bir yönteme argüman olarak kullanıyorsanız , $a | out-stringnet bir avantajı vardır.
rojo

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

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

İkinci satır işlemi gerçekleştirir ve ana makineye çıktı verir, ancak $ a'yı değiştirmez:

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

4> $a

This Is a cat

5> $a.Count

1

10

Bir borudan

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

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

Yaz-Sunucu

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

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

Misal


Bu harika bir numara. Örnek artık işe yaramıyor ve bu cevap 5 yaşında olmasına rağmen bugün öğrendiklerimi açıklamaya çalışıyorum. $ofsOlan Output Field Separatorbir dizi çıktısı için bir dizeye dönüştürüldüğünde kullanılan değişken. Burada komut tarafından çalıştırılan girişin (borudan dizi) dize değerini döndüren kod bloğunda ayarlanır &. Daha $ofsönce bilmiyordum ve &bir senaryo bloğunu argüman olarak kabul ettim
Martin Konopka

3

Aşağıdaki gibi bir tür belirtebilirsiniz:

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

Türü kontrol etme:

$a.GetType()

dogruluyor:

    IsPublic Is Seri Adı BaseType
    -------- -------- ---- --------
    True True String [] System.Array

Çıktı $ a:

PS C: \> $ a 
Bu 
Dır-dir 
bir 
kedi

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

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

Write-Host $sent
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.