No PowerShell, as aspas têm um papel fundamental na definição de strings, pois determinam como o conteúdo é interpretado. Aspas duplas (") permitem a expansão de variáveis e a interpretação de caracteres especiais, enquanto aspas simples (') tratam tudo literalmente. O caractere de escape (`) é usado para inserir caracteres especiais ou evitar que um caractere tenha seu significado padrão. Compreender essas diferenças é essencial para escrever scripts corretos e previsíveis.

Nesta aula, exploraremos em detalhes como funcionam as aspas, o caractere de escape, a interpolação de variáveis e os principais caracteres especiais. Ao final, você será capaz de manipular strings com segurança e evitar erros comuns de sintaxe.

Caractere de escape (`)

O caractere de escape no PowerShell é o acento grave (`). Ele é usado para indicar que o caractere seguinte deve ser tratado de forma especial, seja para representar um caractere literal que normalmente teria um significado especial, seja para inserir um caractere de controle (como nova linha ou tabulação).

Por exemplo, dentro de uma string com aspas duplas, o caractere `n representa uma nova linha, enquanto `t representa uma tabulação. Para incluir uma aspa dupla literal dentro de uma string delimitada por aspas duplas, usamos `". Já dentro de aspas simples, o único caractere que pode ser escapado é a própria aspa simples, usando '' (duas aspas simples consecutivas) — o acento grave não tem efeito em strings com aspas simples.

# Escape de aspa dupla dentro de aspas duplas
$texto = "Ele disse: `"Olá`""
Write-Host $texto  # Saída: Ele disse: "Olá"

# Escape de nova linha
$multilinha = "Linha1`nLinha2"
Write-Host $multilinha
# Saída:
# Linha1
# Linha2

# Escape de tabulação
$tabulado = "Coluna1`tColuna2"
Write-Host $tabulado  # Saída: Coluna1    Coluna2

Note que o caractere de escape também é usado para representar caracteres especiais em expressões regulares e em alguns comandos, mas o foco aqui é seu uso em strings.

Variáveis em strings

Em strings com aspas duplas, variáveis são expandidas automaticamente, ou seja, seu valor é inserido no lugar do nome da variável. Isso é chamado de interpolação de variáveis. Por exemplo:

$nome = "Maria"
$saudacao = "Olá, $nome!"
Write-Host $saudacao  # Saída: Olá, Maria!

Para incluir o nome da variável literalmente (sem expandir), você pode usar aspas simples ou escapar o cifrão com o caractere de escape: `$. Além disso, se a variável for seguida por caracteres que poderiam ser confundidos com parte do nome, use chaves {} para delimitar o nome da variável:

$valor = 100
$texto = "O valor é $valor0"  # Erro: tenta expandir $valor0
$textoCorreto = "O valor é ${valor}0"  # Correto: expande $valor e depois '0'
Write-Host $textoCorreto  # Saída: O valor é 1000

Em strings com aspas simples, as variáveis não são expandidas; o cifrão é tratado como caractere literal. Isso é útil quando você quer exibir exatamente o que escreveu, sem substituições.

$nome = "João"
$literal = 'Olá, $nome!'
Write-Host $literal  # Saída: Olá, $nome!

Caracteres especiais

Além da expansão de variáveis, as aspas duplas permitem o uso de sequências de escape que representam caracteres especiais. As principais são:

  • `n – Nova linha (line feed)
  • `r – Retorno de carro (carriage return)
  • `t – Tabulação horizontal
  • `a – Alerta (beep)
  • `b – Backspace
  • `f – Alimentação de formulário (form feed)
  • `v – Tabulação vertical
  • `0 – Caractere nulo
  • `' – Aspa simples literal (dentro de aspas simples, use ''; dentro de aspas duplas, use `')
  • `" – Aspa dupla literal (dentro de aspas duplas)
  • `` – Acento grave literal

Exemplo com vários caracteres especiais:

$especiais = "Linha1`nLinha2`tTabulado`aBeep"
Write-Host $especiais
# Saída: (com som de beep)
# Linha1
# Linha2    Tabulado

Lembre-se de que esses escapes só funcionam dentro de aspas duplas. Em aspas simples, eles são tratados como texto literal (exceto '' para aspa simples).

Exemplos

Vamos consolidar com exemplos práticos que mostram o uso correto de aspas, escape e variáveis.

# Exemplo 1: Caminho de arquivo com espaços
$caminho = "C:\Program Files\MeuApp\arquivo.txt"
Write-Host "O caminho é: $caminho"
# Saída: O caminho é: C:\Program Files\MeuApp\arquivo.txt

# Exemplo 2: String com aspas duplas internas
$frase = "Ele gritou: `"Socorro!`""
Write-Host $frase  # Saída: Ele gritou: "Socorro!"

# Exemplo 3: Usando aspas simples para evitar expansão
$cmd = 'Get-Process -Name "powershell"'
Write-Host $cmd  # Saída: Get-Process -Name "powershell"

# Exemplo 4: Escape de cifrão
$preco = 50
$texto = "O preço é `$50"
Write-Host $texto  # Saída: O preço é $50

# Exemplo 5: Variável com chaves
$item = "cadeira"
$plural = "${item}s"
Write-Host $plural  # Saída: cadeiras

Boas práticas

  • Use aspas simples sempre que não precisar de interpolação de variáveis ou escapes. Isso torna o código mais explícito e evita expansões indesejadas.
  • Para strings que contêm aspas, alterne entre aspas simples e duplas para evitar escapes desnecessários. Por exemplo: "Ele disse 'olá'" ou 'Ele disse "olá"'.
  • Ao construir caminhos de arquivo, use aspas duplas para permitir a expansão de variáveis, mas tome cuidado com barras invertidas – no PowerShell, a barra invertida não é caractere de escape em strings comuns (exceto antes de acento grave).
  • Evite concatenar strings com o operador + quando a interpolação for suficiente; ela é mais legível e eficiente.

Referências

Exercícios

  1. Crie uma variável $saudacao que contenha a string Olá, mundo! usando aspas duplas. Em seguida, exiba-a.
  2. ✓ Resposta:
    $saudacao = "Olá, mundo!"
    Write-Host $saudacao
  3. Atribua seu nome a uma variável e crie uma string com aspas duplas que diga Meu nome é [seu nome]. Exiba o resultado.
  4. ✓ Resposta:
    $nome = "João"
    $frase = "Meu nome é $nome"
    Write-Host $frase
  5. Usando o caractere de escape, crie uma string que contenha uma aspa dupla literal no meio do texto. Exiba-a.
  6. ✓ Resposta:
    $texto = "Ele disse: `"Olá`""
    Write-Host $texto
  7. Crie uma string com aspas simples que contenha o texto O valor é $100 (sem expandir variável). Exiba-a.
  8. ✓ Resposta:
    $texto = 'O valor é $100'
    Write-Host $texto
  9. Utilizando o caractere de escape, crie uma string com aspas duplas que contenha uma quebra de linha entre as palavras Linha1 e Linha2. Exiba-a.
  10. ✓ Resposta:
    $texto = "Linha1`nLinha2"
    Write-Host $texto