You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在PowerShell中使用adb时的引号转义问题解析

PowerShell 中 adb 命令的双引号转义原理解析

核心逻辑:三层解析器的协同处理

要让 Android 设备输出 Hello "World",必须依次通过PowerShell 解析器、adb 客户端解析器、设备端 shell 解析器(通常是 sh/mksh),每一层对引号的处理规则不同,转义的本质是让每一层都能正确识别哪些引号是字面量,哪些是语法标记。

各层解析规则与失败原因

  • 直接执行 adb shell echo 'hello "world"' 失败:adb 客户端会把单引号当作参数分隔符的一部分,传递给设备 shell 的实际命令是 echo hello "world",设备 shell 忽略未被包裹的双引号,导致引号丢失。
  • 执行 adb shell echo "hello 'world'" 失败:PowerShell 解析双引号后,adb 同样拆解参数,传递给设备 shell 的命令是 echo hello 'world',设备 shell 忽略未包裹的单引号,引号丢失。
  • 用 PowerShell 反引号转义的 adb shell echo 'hello "world"' 失败:PowerShell 的反引号仅在双引号包裹的字符串内有效,单引号内的反引号会被当作字面量传递给 adb,设备 shell 无法识别该转义,导致输出异常。

成功命令的原理拆解

你最终使用的 adb shell "echo 'hello ""world""'" 之所以有效,核心是正确处理了 PowerShell 层的转义:

  1. PowerShell 解析阶段:外层双引号内,"" 是 PowerShell 的转义写法——第一个反引号告诉 PowerShell,后面的双引号是**字面量**,不是当前字符串的结束标记。经过解析后,PowerShell 传递给 adb 的内容是:echo 'hello "world"'`。
  2. adb 客户端阶段:由于整个 shell 命令被双引号包裹,adb 会完整把 echo 'hello "world"' 传递给设备 shell,不会拆解参数。
  3. 设备 shell 阶段:单引号包裹的内容是纯字面量,hello "world" 会被完整输出,双引号得以保留。

更简洁的替代写法

可以用 PowerShell 单引号的嵌套规则(单引号内用两个单引号表示字面量单引号),写法更直观:

adb shell 'echo '\''hello "world"'\'''

PowerShell 解析后,传递给 adb 的命令同样是 echo 'hello "world"',最终输出目标结果。

内容的提问来源于stack exchange,提问作者Dario Viva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 16:43:24