मैं PowerShell में स्ट्रिंग्स और चर को कैसे जोड़ूं?




string-concatenation (11)

मान लीजिए मेरे पास निम्न स्निपेट है:

$assoc = New-Object psobject -Property @{
    Id = 42
    Name = "Slim Shady"
    Owner = "Eminem"
}

Write-host $assoc.Id + "  -  "  + $assoc.Name + "  -  " + $assoc.Owner

मैं इस स्निपेट को दिखाने की उम्मीद करता हूं:

42 - Slim Shady - Eminem

लेकिन इसके बजाय यह दिखाता है:

42 + - + Slim Shady + - + Eminem

जो मुझे लगता है कि + ऑपरेटर स्ट्रिंग्स और वेरिएबल्स को संयोजित करने के लिए उपयुक्त नहीं है।

PowerShell के साथ आप इसे कैसे संपर्क कर सकते हैं?


Cmdlet में अलग-अलग पैरामीटर के रूप में व्यवहार करने के लिए आपको अभिव्यक्ति को कोष्ठक में रखने की आवश्यकता है:

Write-host ($assoc.Id + "  -  "  + $assoc.Name + "  -  " + $assoc.Owner)

अभिव्यक्ति के दौरान:

"string1" + "string2" + "string3"

तारों को जोड़ देगा। Powerhell कमांड को पास करते समय आपको एक तर्क के रूप में मूल्यांकन करने के लिए कोष्ठक के सामने एक $ डालना होगा। उदाहरण:

Write-Host $( "string1" + "string2" + "string3" ) 

बोनस के रूप में, यदि आप इसे कई लाइनों तक फैलाना चाहते हैं, तो आपको लाइन के अंत में बैकटिक सिंटैक्स का उपयोग करने की आवश्यकता है (बिना किसी रिक्त स्थान या बैकटिक के दाईं ओर वर्ण)। उदाहरण:

Write-Host $(`
    "The rain in "        +`
    "Spain falls mainly " +`
    "in the plains"       )`
    -ForegroundColor Yellow

(असल में, मुझे लगता है कि पावरहेल वर्तमान में कुछ गलत गलत तरीके से कार्यान्वित किया गया है जिसके लिए ब्रांड्स के बीच अनावश्यक बैक-टिक्स की आवश्यकता होती है। यदि माइक्रोसॉफ्ट सिर्फ "पायथन" या "टीसीएल" पेंथेरिस नियमों का पालन करेगा जो आपको शुरू करने के बीच जितनी चाहें उतनी नई लाइनें डालने की इजाजत देता है। समापन संश्लेषण तब वे अधिकांश समस्याओं को हल करेंगे जिन्हें लोगों को लाइन निरंतरता से संबंधित शक्तियों और स्ट्रिंग्स के संयोजन के बारे में पसंद नहीं है। मैंने पाया है कि आप कभी-कभी ब्रांड्स के बीच लाइन निरंतरता पर बैक-टिक्स छोड़ सकते हैं, लेकिन इसकी वास्तव में फ्लेकी और अप्रत्याशित अगर यह काम करेगा .. बैकटिक्स जोड़ने के लिए बेहतर है।)


एक और विकल्प है:

$string = $assoc.ID
$string += " - "
$string += $assoc.Name
$string += " - "
$string += $assoc.Owner
Write-Host $string

"सर्वश्रेष्ठ" विधि शायद एक सीबी सुझाव दिया गया है:

Write-host "$($assoc.Id)  -  $($assoc.Name)  -  $($assoc.Owner)"

एक तरीका है:

Write-host "$($assoc.Id)  -  $($assoc.Name)  -  $($assoc.Owner)"

एक और है:

Write-host  ("{0}  -  {1}  -  {2}" -f $assoc.Id,$assoc.Name,$assoc.Owner )

या बस (लेकिन मुझे यह पसंद नहीं है;)):

Write-host $assoc.Id  "  -  "   $assoc.Name  "  -  "  $assoc.Owner

किसी फ़ंक्शन में एक चर / उपयोग में स्टोर करने के लिए दो तारों को संयोजित करने के लिए, आप -जॉइन का उपयोग कर सकते हैं।

उदाहरण के लिए

$name = -join("Jo", "h", "n");

$ जॉन को "जॉन" असाइन करेगा।

तो उत्पादन के लिए, एक पंक्ति में:

Write-Host (-join("Jo", "h", "n"))

जब भी मैं पावरशेल का उपयोग करता हूं, तब से मैं इस (और कई अन्य अनजान चीजों) के साथ संघर्ष करना प्रतीत होता हूं, इसलिए अब मैं इसका चयन करता हूं:

[string]::Concat("There are ", $count, " items in the list")

डॉस दिनों में बस स्ट्रिंग्स को संगत करें। लॉगिंग के लिए यह एक बड़ा सौदा है, इसलिए आप यहां जाएं:

$strDate = Get-Date
$strday = "$($strDate.Year)$($strDate.Month)$($strDate.Day)"

Write-Output "$($strDate.Year)$($strDate.Month)$($strDate.Day)"
Write-Output $strday

मैं सिर्फ .NET String.Format का उपयोग करके ऐसा करने के लिए एक और तरीका लाना चाहता हूं:

$name = "Slim Shady"
Write-Host ([string]::Format("My name is {0}", $name))

वैकल्पिक विकल्प के रूप में यहां एक और तरीका है:

Write-host (" {0}  -  {1}  -  {2}" -f $assoc.Id, $assoc.Name, $assoc.Owner)

Write-Host इस तरह से मिल सकता है:

Write-Host $assoc.Id" - "$assoc.Name" - "$assoc.Owner

यह सबसे आसान तरीका है, आईएमएचओ।








string-concatenation