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.