Hinweis: Während diese Antwort viele Aspekte der String-Interpolation in Powershell, eine umfassendere Behandlung dieses Thema behandelt in this answer von mir zu finden.
Wenn Variablenreferenzen in Strings in doppelten Anführungszeichen einbetten, nur einfache Variablenreferenzen können $(...)
in dem sogenannten subexpression Operator, ohne umschließenden den Ausdruck eingebettet werden:
> $mylist = @("abc", "def") # define an array
> "$mylist[0]" # WRONG: $mylist (the whole array) is expanded, and "[0]" is a literal.
abc def[0]
> "$($mylist[0])" # OK: $(...) ensures that the subscript is recognized.
abc
zu sein genauer, können Sie direkt einbetten die folgenden variablen Referenzen in double-quot ed strings/here-Zeichenfolgen um sie erweitert zu haben (interpoliert):
- eine Variable nur namentlich verwiesen; z. B.
"I'm $HOME."
- eine Variable mit einem Scope-Spezifizierer; z.B.
"I'm on a spiritual $env:PATH."
Um Disambiguieren ein Variablenname von nachfolgenden Zeichen, sie umschließen in {...}
; z. B.
"I'm ${HOME}:"
Beachten Sie, dass ohne {...}
die endgültige :
als Teil des Variablennamens interpretiert worden wäre und einen Fehler verursacht hätte.
Alternativ können Sie die :
als `:
und ähnlich zu entkommen, Verwendung `$
zu entkommen (erstellen wörtliche) $
.
Für alles andere, einschließlich Zugriff auf ein Index der Array-Variable oder eine Objekt Variable Eigenschaft, müssen Sie die subexpression Operator, $(...)
.
Hinweis: $(...)
können Sie gesamte Befehlszeilen in einer Zeichenfolge einbetten; z.B.:
> "Today is $((Get-Date).ToString('d'))."
Today is 10/13/16. # en-US culture
Dokumentation Hinweis: Get-Help about_Quoting_Rules
umfasst String-Interpolation, aber, wie von pSV5, nicht in der Tiefe.
Für Alternativen zu String-Interpolation (Expansion) für Streicher Gebäude finden Ansgar Wiecher's answer.