945 Stimmen

Wie kann ich in PowerShell Zeichenfolgen und Variablen verketten?

Nehmen wir an, ich habe das folgende Snippet:

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

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

Ich würde erwarten, dass dieser Ausschnitt dies zeigt:

42 - Slim Shady - Eminem

Aber stattdessen zeigt es:

42 + - + Slim Shady + - + Eminem

Das lässt mich glauben, dass die + Operator ist für die Verkettung von Zeichenketten und Variablen nicht geeignet.

Wie sollten Sie dies mit PowerShell angehen?

1011voto

David Brabant Punkte 38935
Write-Host "$($assoc.Id) - $($assoc.Name) - $($assoc.Owner)"

Siehe die Windows PowerShell-Sprachenspezifikation Version 3.0 , p34, Erweiterung der Unterausdrücke.

381voto

TinyRacoon Punkte 4286

Es gibt einen Unterschied zwischen einfachen und doppelten Anführungszeichen. (Ich verwende PowerShell 4).

Sie können dies tun (als Benjamin sagte ):

$name = 'Slim Shady'
Write-Host 'My name is'$name
-> My name is Slim Shady

Oder Sie können dies tun:

$name = 'Slim Shady'
Write-Host "My name is $name"
-> My name is Slim Shady

Die einfachen Anführungszeichen stehen für literal, geben Sie die Zeichenfolge bitte genau so aus. Die doppelten Anführungszeichen sind für die Vorverarbeitung gedacht (z. B. für Variablen, Sonderzeichen usw.)

Also:

$name = "Marshall Bruce Mathers III"
Write-Host "$name"
-> Marshall Bruce Mathers III

in Erwägung nachstehender Gründe:

$name = "Marshall Bruce Mathers III"
Write-Host '$name'
-> $name

(Ich finde Gewusst wie: Escape-Zeichen, Begrenzungszeichen und Anführungszeichen gut als Referenz).

273voto

manyways Punkte 3926

Sie können auch Folgendes verwenden -join

z.B.

$var = -join("Hello", " ", "world");

Würde $var "Hallo Welt" zuweisen.

Also zur Ausgabe, in einer Zeile:

Write-Host (-join("Hello", " ", "world"))

156voto

CB. Punkte 56367

Eine Möglichkeit ist:

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

Eine andere ist:

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

Oder einfach nur (aber ich mag das nicht ;) ):

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

97voto

goric Punkte 11135

Versuchen Sie, das, was Sie ausdrucken wollen, in Klammern zu setzen:

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

Ihr Code wird als viele Parameter interpretiert, die an Write-Host . Durch das Einschließen in Klammern werden die Werte verkettet und der resultierende Wert als ein einziger Parameter übergeben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X