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 pojedynczy cudzysłów (') lub podwójny cudzysłów (").

Znaki cudzysłowu są również używane do tworzenia ciągu here-string. Tutaj ciąg jest ciągiem jednocytowym lub dwucytowym, w którym znaki cudzysłowu są interpretowane dosłownie. Ciąg here-string może obejmować wiele wierszy. Wszystkie wiersze w ciągu here-string są interpretowane jako ciągi, mimo że nie są one ujęte w znaki cudzysłowu.

W poleceniach zdalnego komputera cudzysłowu 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.

Ciągi z podwójnym cudzysłami

Ciąg ujęta w podwójny cudzysłów jest ciągiem rozszerzalnym . Nazwy zmiennych poprzedzone znakiem dolara ($) są zastępowane wartością zmiennej przed przekazaniem ciągu do polecenia 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 dwucytowym są oceniane 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 proste odwołania do zmiennych można osadzać bezpośrednio w ciągu rozszerzalnym. Zmienne odwołujące się do indeksowania tablicy lub dostępu do składowych muszą być ujęte w podekspresję. Na przykład:

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

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 nazwa zmiennej następuje dwukropkiem (:). Program PowerShell uwzględnia wszystkie elementy między $ specyfikatorem zakresu i : 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 podstępowi wartości zmiennej w dwucytowym 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 z pojedynczym cudzysłami

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ąć ciąg z pojedynczym cudzysłami 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.'

Albo dwukrotnie cudzysłow wokół dwucytowej 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 ciągu z pojedynczym cudzysłowem, 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.

Ciągi tutaj

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

Ciąg here-string to jednocytowy lub dwucytowy ciąg otoczony znakami (@). Znaki cudzysłowu w ciągu tutaj są interpretowane dosłownie.

Ciąg tutaj:

  • obejmuje wiele wierszy
  • rozpoczyna się od znaku otwierającego, po którym następuje nowa linia
  • kończy się nową linią, po której następuje znak zamykający
  • zawiera każdy wiersz między znakami otwierania i zamykania w ramach jednego ciągu

Podobnie jak zwykłe ciągi, zmienne są zastępowane przez ich wartości w dwucytowych ciągach here-string. W przypadku jednocytowych ciągów tutaj zmienne nie są zastępowane przez ich wartości.

Możesz użyć ciągów tutaj 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

W tym miejscu 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 podczas naciśnięcia klawisza ENTER .

Cudzysłowy:

@"<Enter>
<string> [string] ...<Enter>
"@

Pojedyncze cudzysłowy:

@'<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 znacznikami otwierania i zamykania. 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życie ciągu w poleceniu. Na przykład:

@"
Use a quotation mark (') to begin a string.
"@

Dane wyjściowe tego polecenia to:

Use a quotation mark (') to begin a string.

W cudzysłownych 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.

Ciągi tutaj 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 ciągi tutaj 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 ciągów here-string. 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 , która 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

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ż