about_Quoting_Rules
Descrição breve
Descreve regras para usar aspas simples e duplas no PowerShell.
Descrição longa
Ao analisar, o PowerShell primeiro procura interpretar a entrada como uma expressão. Mas quando uma invocação de comando é encontrada, a análise continua no modo de argumento. Argumentos não numéricos sem aspas são tratados como strings. Se você tiver argumentos que contenham espaços, como caminhos, deverá colocar esses valores de argumento entre aspas. Para obter mais informações sobre a análise de argumentos, consulte a seção Modo de argumento do about_Parsing.
As aspas são usadas para especificar uma cadeia de caracteres literal. Você pode colocar uma cadeia de caracteres entre aspas simples ('
) ou aspas duplas ("
).
As aspas também são usadas para criar uma cadeia de caracteres aqui. Uma cadeia de caracteres here é uma cadeia de caracteres entre aspas simples ou duplas na qual as aspas são interpretadas literalmente. Uma cadeia de caracteres aqui pode abranger várias linhas. Todas as linhas em uma cadeia de caracteres aqui são interpretadas como cadeias de caracteres, mesmo que não estejam entre aspas.
Em comandos para computadores remotos, as aspas definem as partes do comando que são executadas no computador remoto. Em uma sessão remota, as aspas também determinam se as variáveis em um comando são interpretadas primeiro no computador local ou no computador remoto.
Observação
O PowerShell trata aspas inteligentes, também chamadas de aspas tipográficas ou curvas, como aspas normais para cadeias de caracteres. Não use aspas inteligentes para colocar cadeias de caracteres. Ao escrever cadeias de caracteres que contêm aspas inteligentes, siga as diretrizes na seção Incluindo caracteres de aspas em uma cadeia de caracteres deste documento. Para obter mais informações sobre aspas inteligentes, consulte a seção Aspas Inteligentes no artigo da Wikipédia Aspas em inglês.
Cadeias de caracteres entre aspas duplas
Uma cadeia de caracteres entre aspas duplas é uma cadeia de caracteres expansível . Os nomes de variáveis precedidos por um cifrão ($
) são substituídos pelo valor da variável antes que a cadeia de caracteres seja passada para o comando para processamento.
Por exemplo:
$i = 5
"The value of $i is $i."
A saída desse comando é:
The value of 5 is 5.
Além disso, em uma cadeia de caracteres entre aspas duplas, as expressões são avaliadas e o resultado é inserido na cadeia de caracteres. Por exemplo:
"The value of $(2+3) is 5."
A saída desse comando é:
The value of 5 is 5.
Somente referências de variáveis básicas podem ser inseridas diretamente em uma cadeia de caracteres expansível. As referências de variáveis que usam indexação de matriz ou acesso de membro devem ser colocadas em uma subexpressão. Por exemplo:
"PS version: $($PSVersionTable.PSVersion)"
PS version: 5.1.22621.4111
Para separar um nome de variável dos caracteres subsequentes na cadeia de caracteres, coloque-o entre chaves ({}
). Isso é especialmente importante se o nome da variável for seguido por dois-pontos (:
). O PowerShell considera tudo entre o $
especificador de escopo e :
um, normalmente fazendo com que a interpretação falhe. Por exemplo, "$HOME: where the heart is."
gera um erro, mas "${HOME}: where the heart is."
funciona conforme o esperado.
Para evitar a substituição de um valor de variável em uma cadeia de caracteres entre aspas duplas, use o caractere de acento grave (`
), que é o caractere de escape do PowerShell.
No exemplo a seguir, o caractere de acento grave que precede a primeira $i
variável impede que o PowerShell substitua o nome da variável por seu valor.
Por exemplo:
$i = 5
"The value of `$i is $i."
A saída desse comando é:
The value of $i is 5.
Cadeias de caracteres entre aspas simples
Uma cadeia de caracteres entre aspas simples é uma cadeia de caracteres literal . A cadeia de caracteres é passada para o comando exatamente como você a digita. Nenhuma substituição é realizada. Por exemplo:
$i = 5
'The value of $i is $i.'
A saída desse comando é:
The value $i is $i.
Da mesma forma, expressões em cadeias de caracteres entre aspas simples não são avaliadas. Eles são interpretados como literais de cadeia de caracteres. Por exemplo:
'The value of $(2+3) is 5.'
A saída desse comando é:
The value of $(2+3) is 5.
Incluindo caracteres de aspas em uma string
Para fazer com que aspas duplas apareçam em uma cadeia de caracteres, coloque a cadeia inteira entre aspas simples. Por exemplo:
'As they say, "live and learn."'
A saída desse comando é:
As they say, "live and learn."
Você também pode colocar uma cadeia de caracteres entre aspas simples em uma cadeia de caracteres entre aspas duplas. Por exemplo:
"As they say, 'live and learn.'"
A saída desse comando é:
As they say, 'live and learn.'
Ou dobre as aspas em torno de uma frase entre aspas duplas. Por exemplo:
"As they say, ""live and learn."""
A saída desse comando é:
As they say, "live and learn."
Para incluir aspas simples em uma cadeia de caracteres entre aspas simples, use uma segunda aspa simples consecutiva. Por exemplo:
'don''t'
A saída desse comando é:
don't
Para forçar o PowerShell a interpretar aspas duplas literalmente, use um caractere de acento grave. Isso impede que o PowerShell interprete as aspas como um delimitador de cadeia de caracteres. Por exemplo:
"Use a quotation mark (`") to begin a string."
'Use a quotation mark (`") to begin a string.'
Como o conteúdo das cadeias de caracteres entre aspas simples é interpretado literalmente, o caractere de acento grave é tratado como um caractere literal e exibido na saída.
Use a quotation mark (") to begin a string.
Use a quotation mark (`") to begin a string.
Como o PowerShell interpreta aspas inteligentes, como ‘
, ’
, “
e ”
, como aspas normais, as aspas inteligentes também precisam ser escapadas.
Por exemplo:
"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.
Aqui-strings
As regras de aspas para cadeias de caracteres aqui são ligeiramente diferentes.
Uma cadeia de caracteres aqui é uma cadeia de caracteres entre aspas simples ou duplas entre aspas simples e entre aspas arrobas (@
). As aspas dentro de uma cadeia de caracteres aqui são interpretadas literalmente.
Uma cadeia de caracteres aqui:
- Abrange várias linhas
- começa com a marca de abertura seguida por uma nova linha
- termina com uma nova linha seguida pela marca de fechamento
- inclui todas as linhas entre as marcas de abertura e fechamento como parte de uma única cadeia de caracteres
Como strings regulares, as variáveis são substituídas por seus valores em strings aqui com aspas duplas. Em cadeias de caracteres aqui entre aspas simples, as variáveis não são substituídas por seus valores.
Você pode usar here-strings para qualquer texto, mas elas são particularmente úteis para os seguintes tipos de texto:
- Texto que contém aspas literais
- Várias linhas de texto, como o texto em um bloco HTML ou XML
- O texto de Ajuda para um script ou documento de função
Uma cadeia de caracteres aqui pode ter um dos seguintes formatos, em que <Enter>
representa o caractere oculto de avanço de linha ou nova linha que é adicionado quando você pressiona a tecla ENTER .
Aspas duplas:
@"<Enter>
<string> [string] ...<Enter>
"@
Aspas simples:
@'<Enter>
<string> [string] ...<Enter>
'@
Observação
O caractere final de nova linha faz parte da marca de fechamento. Não é adicionado à cadeia de caracteres aqui.
Uma cadeia de caracteres aqui contém todo o texto entre as marcas de abertura e fechamento. Na cadeia de caracteres here, todas as aspas são interpretadas literalmente. Por exemplo:
@"
For help, type "get-help"
"@
A saída desse comando é:
For help, type "get-help"
O uso de uma cadeia de caracteres aqui pode simplificar o uso de uma cadeia de caracteres em um comando. Por exemplo:
@"
Use a quotation mark, like ' or ", to begin a string.
"@
A saída desse comando é:
Use a quotation mark, like ' or ", to begin a string.
Em cadeias de caracteres aqui entre aspas simples, as variáveis são interpretadas literalmente e reproduzidas exatamente. Por exemplo:
@'
The $profile variable contains the path
of your PowerShell profile.
'@
A saída desse comando é:
The $profile variable contains the path
of your PowerShell profile.
Em cadeias de caracteres aqui com aspas duplas, as variáveis são substituídas por seus valores. Por exemplo:
@"
Even if you have not created a profile,
the path of the profile file is:
$profile.
"@
A saída desse comando é:
Even if you have not created a profile,
the path of the profile file is:
C:\Users\User1\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1.
Here-strings são normalmente usadas para atribuir várias linhas a uma variável. Por exemplo, a seguinte cadeia de caracteres aqui atribui uma página de XML à variável $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>
"@
Here-strings também são um formato conveniente para entrada no cmdlet, que converte ConvertFrom-StringData
here-strings em tabelas de hash.
Para obter mais informações, consulte ConvertFrom-StringData
.
Observação
O PowerShell permite que cadeias de caracteres entre aspas duplas ou simples se estendam por várias linhas sem usar a @
sintaxe de cadeias de caracteres aqui. No entanto, a sintaxe completa de cadeia de caracteres aqui é o uso preferencial.
Interpretação de cordas expansíveis
As cadeias de caracteres expandidas não têm necessariamente a mesma aparência que a saída padrão que você vê no console.
As coleções, incluindo matrizes, são convertidas em cadeias de caracteres colocando um único espaço entre as representações de cadeia de caracteres dos elementos. Um separador diferente pode ser especificado definindo a variável $OFS
de preferência . Para obter mais informações, consulte a $OFS
variável de preferência.
Instâncias de qualquer outro tipo são convertidas em cadeias de caracteres chamando o método, o ToString()
que pode não fornecer uma representação significativa. Por exemplo:
"hashtable: $(@{ key = 'value' })"
hashtable: System.Collections.Hashtable
Para obter a mesma saída do console, use uma subexpressão na qual você canaliza para Out-String
. Aplique o Trim()
método se quiser remover quaisquer linhas vazias à esquerda e à direita.
"hashtable:`n$((@{ key = 'value' } | Out-String).Trim())"
hashtable:
Name Value
---- -----
key value
As configurações de cultura afetam a interpretação da cadeia de caracteres
Os ToString()
métodos usam as configurações de cultura definidas atualmente para converter valores em cadeias de caracteres. Por exemplo, a cultura da sessão do PowerShell a seguir é definida como de-DE
. Quando o ToString()
método converte o valor de em uma cadeia de $x
caracteres, ele usa uma vírgula (,
) para o separador decimal. Além disso, o método converte ToString()
a data em uma cadeia de caracteres usando o formato apropriado para as configurações de localidade alemãs.
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
No entanto, o PowerShell usa a cultura invariável ao interpretar expressões de cadeia de caracteres expansíveis.
PS? "$x"
1.2
PS> "$(Get-Date 2024-03-19)"
03/19/2024 00:00:00
Passando strings entre aspas para comandos externos
Alguns comandos nativos esperam argumentos que contenham caracteres de aspas. O PowerShell interpreta a cadeia de caracteres entre aspas antes de passá-la para o comando externo. Essa interpretação remove os caracteres de aspas externas.
Para obter mais informações sobre esse comportamento, consulte o artigo about_Parsing.