about_Quoting_Rules

Krótki opis

Opisuje reguły używania pojedynczych i podwójnych cudzysłowów w programie PowerShell.

Długi opis

Znaki cudzysłowu służą do określania ciągu literału. Ciąg można ująć w znaki pojedynczego cudzysłowu (') lub podwójny cudzysłów (").

Cudzysłowy są również używane do tworzenia ciągu here-string. Tutaj ciąg jest ciągiem jednocygowym lub dwucytowym, 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łów zdefiniuj 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.

Podwójne cudzysłów ciągi

Ciąg ujęta w znaki podwójnego cudzysłowu jest ciągiem rozwijalnym . 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. Odwołania do zmiennych przy użyciu indeksowania tablicy lub dostępu do składowych muszą być ujęte w podrażenie. Na przykład:

"PS version: $($PSVersionTable.PSVersion)"
PS version: 7.2.0

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 : , co zwykle powoduje 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 dwucygodniowym ciągu, użyj znaku ucieczki (`), 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 pojedynczego cudzysłów

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 znaki pojedynczego cudzysłowu. 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ąć ciąg w cudzysłów 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.'

Lub, dwukrotnie cudzysłowu wokół podwójnego cudzysłowu frazy. Na przykład:

"As they say, ""live and learn."""

Dane wyjściowe tego polecenia to:

As they say, "live and learn."

Aby dołączyć pojedynczy cudzysłów do ciągu pojedynczego cudzysłowu, użyj drugiego z rzędu pojedynczego cudzysłowu. Na przykład:

'don''t'

Dane wyjściowe tego polecenia to:

don't

Aby wymusić dosłownie interpretację podwójnego cudzysłowu w programie PowerShell, 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.

Tutaj ciągi

Reguły cudzysłowu dla ciągów here-string są nieco inne.

Tutaj ciąg jest ciągiem jednocytowym lub dwucytowym otoczonym znakami (@). Znaki cudzysłowu w ciągu tutaj są interpretowane dosłownie.

Tutaj ciąg:

  • obejmuje wiele wierszy
  • rozpoczyna 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ącymi i zamykającymi w ramach jednego ciągu

Podobnie jak zwykłe ciągi, zmienne są zastępowane przez ich wartości w cudzysłów w cudzysłów tutaj. W cudzysłów w cudzysłów tutaj zmienne nie są zastępowane przez ich wartości.

Tutaj można używać ciągów dla dowolnego tekstu, ale są one szczególnie przydatne w przypadku następujących rodzajów 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

Ciąg here-string może mieć dowolny z następujących formatów, gdzie <Enter> reprezentuje znak ukryty linefeed lub newline, który jest dodawany po naciśnięciu klawisza 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 tutaj.

Tutaj ciąg zawiera cały tekst między znakami otwierającymi i zamykającymi. 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 tutaj-ciągu może uprościć użycie 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 pojedynczych cudzysłowach ciągi 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 ich wartościami. 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 ConvertFrom-StringData polecenia cmdlet, który konwertuje ciągi tutaj na tabele skrótów. Aby uzyskać więcej informacji, zobacz ConvertFrom-StringData.

Uwaga

Program PowerShell umożliwia podwójne lub jednocygowe 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 rozwijalnych

Rozwinięte ciągi nie muszą wyglądać tak samo jak domyślne dane wyjściowe widoczne w konsoli.

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ą $OFSpreferencji . 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 podrażenia, w którym przesyłasz potok do elementu Out-String. 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ągów

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 de-DEwartość . ToString() Gdy metoda konwertuje wartość $x na ciąg, używa przecinka (,) separatora dziesiętnego. ToString() Ponadto metoda konwertuje datę na ciąg przy użyciu odpowiedniego formatu dla ustawień regionalnych języka niemieckiego.

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ągu.

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 polecenia natywne 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 .

Zobacz też