about_Quoting_Rules
Krótki opis
Opisuje reguły używania pojedynczych i podwójnych cudzysłowów w programie PowerShell.
Długi opis
Podczas analizowania program PowerShell najpierw analizuje dane wejściowe jako wyrażenie. Jednak po napotkaniu wywołania polecenia analizowanie będzie kontynuowane w trybie argumentu. Argumenty nieliczbowe bez cudzysłowów są traktowane jako ciągi. Jeśli masz argumenty zawierające spacje, takie jak ścieżki, należy ująć te wartości argumentów w cudzysłowie. Aby uzyskać więcej informacji na temat analizowania argumentów, zobacz sekcję Tryb argumentów about_Parsing.
Znaki cudzysłowu służą do określania ciągu literału. Ciąg można ująć w pojedynczy cudzysłów ('
) lub podwójny cudzysłów ("
).
Znaki cudzysłowu są również używane do tworzenia ciągu tutaj. Tutaj ciąg jest ciągiem jednocytowym lub dwupoznanym, w którym znaki cudzysłowu są interpretowane dosłownie. Tutaj ciąg może obejmować wiele wierszy. Wszystkie wiersze w ciągu here-string są interpretowane jako ciągi, mimo że nie są ujęte w znaki cudzysłowu.
W poleceniach dla komputerów zdalnych cudzysłowy definiują części polecenia, które są uruchamiane na komputerze zdalnym. W sesji zdalnej znaki cudzysłowu określają również, czy zmienne w poleceniu są interpretowane jako pierwsze na komputerze lokalnym, czy na komputerze zdalnym.
Uwaga
Program PowerShell traktuje inteligentne cudzysłowy, nazywane również cudzysłowami typograficznymi lub curly, jako zwykłe znaki cudzysłowu dla ciągów. Nie używaj inteligentnych cudzysłowów do ujęć ciągów. Podczas pisania ciągów zawierających inteligentne cudzysłów postępuj zgodnie ze wskazówkami w sekcji Dołączanie znaków cudzysłowu w sekcji ciągu tego dokumentu. Aby uzyskać więcej informacji na temat inteligentnych cudzysłowów, zobacz sekcję Smart Quotes w artykule Wikipedia Cudzysłowy w języku angielskim.
Ciągi z podwójnym cudzysłów
Ciąg ujęty w podwójny cudzysłów jest ciągiem , który można rozwinąć . Nazwy zmiennych poprzedzone znakiem dolara ($
) są zastępowane wartością zmiennej przed przekazaniem ciągu do polecenia do przetwarzania.
Na przykład:
$i = 5
"The value of $i is $i."
Dane wyjściowe tego polecenia to:
The value of 5 is 5.
Ponadto w ciągu z podwójnym cudzysłów są obliczane wyrażenia, a wynik jest wstawiany w ciągu. Na przykład:
"The value of $(2+3) is 5."
Dane wyjściowe tego polecenia to:
The value of 5 is 5.
Tylko podstawowe odwołania do zmiennych mogą być bezpośrednio osadzone w ciągu rozszerzalnym. Zmienne odwołujące się do indeksowania tablicy lub dostępu do składowych muszą być ujęte w podexpressionie. Na przykład:
"PS version: $($PSVersionTable.PSVersion)"
PS version: 5.1.22621.4111
Aby oddzielić nazwę zmiennej od kolejnych znaków w ciągu, należy ująć ją w nawiasy klamrowe ({}
). Jest to szczególnie ważne, jeśli po nazwie zmiennej następuje dwukropek (:
). Program PowerShell uwzględnia wszystkie elementy między $
specyfikatorem zakresu a :
, zwykle powodując niepowodzenie interpretacji. Na przykład "$HOME: where the heart is."
zgłasza błąd, ale "${HOME}: where the heart is."
działa zgodnie z oczekiwaniami.
Aby zapobiec podstawieniu wartości zmiennej w ciągu dwucytowym, użyj znaku backtick (`
), który jest znakiem ucieczki programu PowerShell.
W poniższym przykładzie znak backtick poprzedzający pierwszą $i
zmienną uniemożliwia programowi PowerShell zastąpienie nazwy zmiennej jego wartością.
Na przykład:
$i = 5
"The value of `$i is $i."
Dane wyjściowe tego polecenia to:
The value of $i is 5.
Ciągi jednocytowe
Ciąg ujęty w pojedynczy cudzysłów jest ciągiem dosłownym. Ciąg jest przekazywany do polecenia dokładnie tak, jak go wpiszesz. Nie jest wykonywane podstawianie. Na przykład:
$i = 5
'The value of $i is $i.'
Dane wyjściowe tego polecenia to:
The value $i is $i.
Podobnie wyrażenia w ciągach z pojedynczym cudzysłów nie są oceniane. Są one interpretowane jako literały ciągu. Na przykład:
'The value of $(2+3) is 5.'
Dane wyjściowe tego polecenia to:
The value of $(2+3) is 5.
Dołączanie znaków cudzysłowu w ciągu
Aby znaki podwójnego cudzysłowu pojawiały się w ciągu, należy ująć cały ciąg w pojedynczy cudzysłów. Na przykład:
'As they say, "live and learn."'
Dane wyjściowe tego polecenia to:
As they say, "live and learn."
Można również ująć pojedynczy cudzysłów ciąg w dwucytowy ciąg. Na przykład:
"As they say, 'live and learn.'"
Dane wyjściowe tego polecenia to:
As they say, 'live and learn.'
Możesz też podwoić cudzysłów wokół dwupoznanej frazy. Na przykład:
"As they say, ""live and learn."""
Dane wyjściowe tego polecenia to:
As they say, "live and learn."
Aby uwzględnić pojedynczy cudzysłów w jednym cudzysłowie, użyj drugiego z rzędu pojedynczego cudzysłowu. Na przykład:
'don''t'
Dane wyjściowe tego polecenia to:
don't
Aby wymusić, aby program PowerShell interpretował podwójny cudzysłów dosłownie, użyj znaku backtick. Uniemożliwia to programowi PowerShell interpretowanie cudzysłowu jako ogranicznika ciągu. Na przykład:
"Use a quotation mark (`") to begin a string."
'Use a quotation mark (`") to begin a string.'
Ponieważ zawartość ciągów jednocytowych jest interpretowana dosłownie, znak backtick jest traktowany jako znak literału i wyświetlany w danych wyjściowych.
Use a quotation mark (") to begin a string.
Use a quotation mark (`") to begin a string.
Ponieważ program PowerShell interpretuje inteligentne znaki cudzysłowu, takie jak ‘
, ’
, “
i ”
, jako zwykłe cudzysłowy, inteligentne cudzysłów również muszą zostać uniknięci.
Na przykład:
"Double ““smart quotation marks`” must be escaped in a double-quoted string."
'Single ‘‘smart quotation marks’’ must be escaped in a single-quoted string.'
Double “smart quotation marks” must be escaped in a double-quoted string.
Single ‘smart quotation marks’ must be escaped in a single-quoted string.
Tutaj ciągi
Reguły cudzysłowu dla ciągów tutaj są nieco inne.
Tutaj-ciąg jest jednocytnym lub dwucytowym ciągiem otoczonym znakami (@
). Znaki cudzysłowu w ciągu tutaj są interpretowane dosłownie.
Ciąg tutaj:
- obejmuje wiele wierszy
- zaczyna się od znaku otwierającego, po którym następuje nowy wiersz
- kończy się nową linią, po której następuje znak zamykający
- zawiera każdy wiersz między znakami otwierającym i zamykającym w ramach pojedynczego ciągu
Podobnie jak zwykłe ciągi, zmienne są zastępowane przez ich wartości w cudzysłów cudzysłów here-strings. W przypadku jednocytowych ciągów tutaj zmienne nie są zastępowane przez ich wartości.
Możesz użyć tutaj ciągów dla dowolnego tekstu, ale są one szczególnie przydatne w przypadku następującego rodzaju tekstu:
- Tekst zawierający znaki cudzysłowu literału
- Wiele wierszy tekstu, takich jak tekst w bloku HTML lub XML
- Tekst Pomocy dla skryptu lub dokumentu funkcji
Tutaj ciąg może mieć jeden z następujących formatów, gdzie <Enter>
reprezentuje znak ukryty wiersza lub nowy wiersz, który jest dodawany po naciśnięciu ENTER .
Cudzysłowy:
@"<Enter>
<string> [string] ...<Enter>
"@
Apostrofy:
@'<Enter>
<string> [string] ...<Enter>
'@
Uwaga
Ostatni znak nowego wiersza jest częścią znaku zamykającego. Nie jest dodawany do ciągu here-string.
Tutaj ciąg zawiera cały tekst między znakami otwierającym i zamykającym. W ciągu tutaj wszystkie znaki cudzysłowu są interpretowane dosłownie. Na przykład:
@"
For help, type "get-help"
"@
Dane wyjściowe tego polecenia to:
For help, type "get-help"
Użycie ciągu tutaj może uprościć używanie ciągu w poleceniu. Na przykład:
@"
Use a quotation mark, like ' or ", to begin a string.
"@
Dane wyjściowe tego polecenia to:
Use a quotation mark, like ' or ", to begin a string.
W jednocygowych ciągach tutaj zmienne są interpretowane dosłownie i odtwarzane dokładnie. Na przykład:
@'
The $profile variable contains the path
of your PowerShell profile.
'@
Dane wyjściowe tego polecenia to:
The $profile variable contains the path
of your PowerShell profile.
W cudzysłów cudzysłów tutaj zmienne są zastępowane przez ich wartości. Na przykład:
@"
Even if you have not created a profile,
the path of the profile file is:
$profile.
"@
Dane wyjściowe tego polecenia to:
Even if you have not created a profile,
the path of the profile file is:
C:\Users\User1\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1.
Tutaj ciągi są zwykle używane do przypisywania wielu wierszy do zmiennej. Na przykład poniższy ciąg tutaj przypisuje stronę XML do zmiennej $page.
$page = [XML] @"
<command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10"
xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10"
xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10">
<command:details>
<command:name>
Format-Table
</command:name>
<maml:description>
<maml:para>Formats the output as a table.</maml:para>
</maml:description>
<command:verb>format</command:verb>
<command:noun>table</command:noun>
<dev:version></dev:version>
</command:details>
...
</command:command>
"@
Tutaj ciągi są również wygodnym formatem danych wejściowych polecenia ConvertFrom-StringData
cmdlet, który konwertuje tutaj ciągi na tabele skrótów.
Aby uzyskać więcej informacji, zobacz ConvertFrom-StringData
.
Uwaga
Program PowerShell umożliwia podwójne lub jednocytowe ciągi obejmujące wiele wierszy bez używania @
składni tutaj-ciągów. Jednak pełna składnia ciągu tutaj jest preferowanym użyciem.
Interpretacja ciągów, które można rozszerzać
Rozwinięte ciągi nie muszą wyglądać tak samo jak domyślne dane wyjściowe widoczne w konsoli programu .
Kolekcje, w tym tablice, są konwertowane na ciągi, umieszczając jedną spację między reprezentacjami ciągów elementów. Inny separator można określić, ustawiając zmienną $OFS
preferencji . Aby uzyskać więcej informacji, zobacz zmienną $OFS
preferencji.
Wystąpienia dowolnego innego typu są konwertowane na ciągi przez wywołanie ToString()
metody , co może nie dać znaczącej reprezentacji. Na przykład:
"hashtable: $(@{ key = 'value' })"
hashtable: System.Collections.Hashtable
Aby uzyskać te same dane wyjściowe co w konsoli programu , użyj podexpressionu, w którym przesyłasz potok do Out-String
elementu . Zastosuj metodę Trim()
, jeśli chcesz usunąć wszystkie wiodące i końcowe puste wiersze.
"hashtable:`n$((@{ key = 'value' } | Out-String).Trim())"
hashtable:
Name Value
---- -----
key value
Ustawienia kultury wpływają na interpretację ciągu
Metody ToString()
używają bieżących skonfigurowanych ustawień kultury do konwertowania wartości na ciągi. Na przykład kultura następującej sesji programu PowerShell jest ustawiona na wartość de-DE
. ToString()
Gdy metoda konwertuje wartość $x
na ciąg, używa przecinka (,
) dla separatora dziesiętnego. ToString()
Ponadto metoda konwertuje datę na ciąg przy użyciu odpowiedniego formatu dla ustawień regionalnych niemiec.
PS> Get-Culture
LCID Name DisplayName
---- ---- -----------
1031 de-DE German (Germany)
PS> $x = 1.2
PS> $x.ToString()
1,2
PS> (Get-Date 2024-03-19).ToString()
19.03.2024 00:00:00
Jednak program PowerShell używa niezmiennej kultury podczas interpretowania rozszerzalnych wyrażeń ciągów.
PS? "$x"
1.2
PS> "$(Get-Date 2024-03-19)"
03/19/2024 00:00:00
Przekazywanie ciągów cytowanych do poleceń zewnętrznych
Niektóre natywne polecenia oczekują argumentów zawierających znaki cudzysłowu. Program PowerShell interpretuje ciąg cytowany przed przekazaniem go do polecenia zewnętrznego. Ta interpretacja usuwa znaki cudzysłowu zewnętrznego.
Aby uzyskać więcej informacji na temat tego zachowania, zobacz artykuł about_Parsing .