मैं PowerShell में एक सरणी ऑब्जेक्ट को स्ट्रिंग में कैसे परिवर्तित करूं?


175

मैं एक ऐरे ऑब्जेक्ट को स्ट्रिंग में कैसे बदल सकता हूं?

मैंने कोशिश की:

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

भाग्य से नहीं । PowerShell में विभिन्न संभावनाएँ क्या हैं?


5
मेरा जवाब देखें लेकिन आपका कोड भी ठीक काम करता है। आप क्यों कहते हैं "बिना किस्मत के"?
रोमन कुज़मिन

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 प्रलेखित है
लियाम

13
स्टैकओवरफ़्लो डॉक्यूमेंटेशन को बंद कर दिया गया है, इसलिए लियाम का लिंक मृत है। यहाँ $ OFS, आउटपुट फील्ड सेपरेटर का एक और स्पष्टीकरण दिया गया है: blogs.msdn.microsoft.com/powershell/2006/07/15/…
साइमन टिव्सी

इसे ओएफएस क्यों कहा जाता है? यह दशकों और दशकों के लिए मानक शेल पर IFS कहा जाता है, यह एक अजीब नाम है।
जोहान बोउले

1
@ जोहानॉले: क्योंकि इनपुट फील्ड सेपरेटर के पहले चरित्र का उपयोग आउटपुट फील्ड सेपरेटर के रूप में किया जाता है, यह एक बुरा हैक है - और मल्टी-कैरेक्टर स्ट्रिंग्स के साथ फ़ील्ड को अलग करने की अनुमति नहीं देता है। (उदाहरण के लिए Awk में FS और OFS चर हैं)।
मार्टिन बोनर

@ स्मार्ट बोनर: धन्यवाद, यह अब समझ में आता है। मुझे नहीं पता कि मैंने इसे कैसे गड़बड़ कर दिया।
जोहान बोउले

36

मैंने पाया कि एरे को Out-Stringcmdlet पर पाइप करना अच्छी तरह से काम करता है।

उदाहरण के लिए:

PS C:\> $a  | out-string

This
Is
a
cat

यह आपके अंतिम लक्ष्य पर निर्भर करता है कि किस विधि का उपयोग करना सबसे अच्छा है।


4
FYI करें: सिर्फ करने $aका ही असर होगा$a | out-string
JohnLBevan

7
@ जोनलब्वान हमेशा नहीं। ($a | out-string).getType()= स्ट्रिंग। $a.getType()= वस्तु []। यदि आप एक स्ट्रिंग (जैसे invoke-expressionउदाहरण के लिए) की अपेक्षा विधि में $ एक तर्क के रूप में उपयोग कर रहे हैं , तो $a | out-stringइसका स्पष्ट लाभ है।
रोजो

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 साल पुराना है, मैं आज जो मैंने सीखा है उसे समझाने की कोशिश करता हूं। $ofsहै Output Field Separatorचर जो जब एक सरणी उत्पादन के लिए स्ट्रिंग में बदल जाता है प्रयोग किया जाता है। यहां यह स्क्रिप्ट ब्लॉक में सेट है इनपुट के स्ट्रिंग मान (पाइप से सरणी) जो कमांड द्वारा निष्पादित किया जाता है &। मुझे $ofsपहले से पता नहीं था , साथ ही &एक स्क्रिप्ट ब्लॉक को तर्क के रूप में स्वीकार करना
मार्टिन कोनोपका

3

आप इस प्रकार टाइप कर सकते हैं:

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

प्रकार की जाँच:

$a.GetType()

इस बात की पुष्टि:

    IsPublic IsSerial नाम बेस टाइप
    -------- -------- ---- --------
    ट्रू ट्रू स्ट्रिंग [] 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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.