引号规则与转义
PowerShell 里单引号与双引号的区别只有一条,但影响面很大:单引号内的一切都是字面内容,双引号内会先做变量替换与转义处理。这条规则决定了字符串里出现美元符号、反引号或换行时该怎么写。路径与含特殊字符的文本用单引号最安全;需要拼接变量或插入特殊字符时再用双引号。把两者混用,常见结果就是「变量没被替换」或「本该是文本的内容被展开成了空值」。
基本信息
| 适用平台 | Windows PowerShell 5.1 与 PowerShell 7 及以上 |
|---|---|
| 单引号 | 内部内容全部按字面处理,不替换变量,也不解释转义 |
| 双引号 | 会替换变量与子表达式,并解释转义字符 |
| 转义字符 | 双引号内用反引号表示换行、制表与字面符号 |
| 单引号内表示单引号 | 连续写两个单引号,而不是用反斜杠 |
| 适用建议 | 路径与固定文本用单引号,需要插值时才用双引号 |
典型使用场景
- 书写含美元符号的文本,如金额、密码片段,避免被当作变量展开
- 拼接提示信息:把变量值嵌入一句可读的说明里
- 在双引号内插入换行或制表符,控制输出格式
- 书写含空格与特殊字符的路径,避免被拆成多段
- 构造正则表达式:注意反斜杠在两种引号下的表现差异
- 把命令输出嵌入字符串,用子表达式在双引号内取结果
常用示例
常用示例
# 单引号:变量不会被替换
$name = 'web01'
'主机: $name'
# 双引号:变量会被替换
"主机: $name"
# 含美元符号的文本用单引号最安全
$msg = '价格为 $100'
# 双引号内的子表达式
"当前时间: $(Get-Date -Format 'HH:mm')"
# 反引号转义:换行与制表
"第一行`n第二行`t带制表"
# 字面美元符号
"成本 `$100"
# 单引号内表示单引号:连续两个
'it''s ok'
# 路径含空格:两种引号都可,单引号更省心
Copy-Item 'D:\Program Files\App\a.txt' 'D:\Bak\a.txt'写法对照
| 写法 | 内容 | 结果 |
|---|---|---|
| 单引号包裹变量名 | '主机: $name' | 原样输出不替换 |
| 双引号包裹变量名 | "主机: $name" | 替换为变量实际值 |
| 双引号内子表达式 | "$(表达式)" | 先执行表达式再插入结果 |
| 双引号内反引号加 n | 换行转义 | 输出真正的换行 |
| 双引号内反引号加美元符号 | 字面美元符号 | 输出美元符号本身 |
| 单引号内两个单引号 | 表示一个单引号 | 用于含单引号的文本 |
路径含空格或方括号时用单引号最稳:既不担心变量被展开,也不用担心特殊字符被解释。需要把变量拼进路径时再改用双引号。
构造正则时尤其要留意引号:不同引号对反斜杠的处理不同,容易出现「表达式看起来对但匹配不到」的情况,写完后先用一条样本数据验证。