如何在Android ADB shell 命令中转义“&”?

如何在Android ADB shell 命令中转义“&”?

寻求有关如何在 ADB 命令行中转义“&”的帮助——任何指导都将不胜感激!

我正在尝试从运行 B&N Nook 应用程序的 Android 平板电脑中提取 .epub 书籍文件。NOOK 应用程序将电子书文件存储在“/data/data/bn.ereader/files/B&N Downloads/Books”中。“B&N Downloads”字符串导致 ADB shell 命令出现问题。我尝试通过以下方式转义“&”和“空格”...

$ ./adb shell cd ./data/data/bn.ereader/files/B&N Downloads/Books (原始命令)
$ ./adb shell cd ./data/data/bn.ereader/files/B\&N\ Downloads/Books
$ ./adb shell cd ./data/data/bn.ereader/files/'B&N Downloads'/Books $
./adb shell cd './data/data/bn.ereader/files/B&N Downloads/Books'
$ ./adb shell cd ./data/data/bn.ereader/files/"B&N Downloads"/Books
$ ./adb shell cd ./data/data/bn.ereader/files/B^&N^ Downloads/Books
(来自另一个答案中的建议:尝试将“&”作为 adb shell 输入文本的一部分

总是导致同样的错误...

/system/bin/sh:N:未找到
/system/bin/sh:cd:/data/data/bn.ereader/files/B:没有此文件或目录

ADB 计算机:
MacBookPro 9,2(2012年中)
系统版本:macOS 10.14.6(18G9323)“Mojave”
内核版本:Darwin 18.7.0。

目标 Android 设备:
B&N Nook HD+(运行 CyanogenMod)
Android 版本:7.1.1
内核版本:3.0.101(dmaces@gc-xenial #1)
版本号:cm_ovation-userdebug 7.1.1 NMF26Q 161222 测试密钥

还在联想 Tab M10 Plus 3rd Gen 上尝试过,结果相同:
Android 版本:12
内核版本:4.14.186-ga2e751134649
内部版本号:TB125FU_S000118_220927_ROW

[注意:我通过简单地对问题“B&N 下载”文件夹上方的整个目录树执行“拉取”操作已完成原始任务,但如何转义“&”的问题仍然存在]

答案1

查看帖子 adb shell 输入文本不接受 & 符号

接受的答案是这样的:

您需要将字符串括在引号中,并转义符号“hello&hello”

另一个答案是:hello1"&"hello2

还有另一个答案评论道:

( ) < > | ; & * \ ~ " '和空格都需要转义。
空格可以用 代替%s

答案2

@davidgo 已将这个问题的解决方案发布为评论...
双重转义 & 字符 - 即 \\\&,因此单次转义的 & 被传递到 shell,在那里进行转义。因此命令为:
./adb shell cd ./data/data/bn.ereader/files/B\\\&N\\\ Downloads/Books
效果很好!

我发现的替代方案 #2 是:
$ ./adb shell(将 Android 设备上的控制台置于 shell 模式)
# cd data/data/bn.ereader/files/B\&N\ Downloads/Books/

方案 #2 的一个好处是 Android 上的制表符自动完成功能现在也能正常工作。注意:Android shell 模式中的任何错误似乎都会中止该模式并将控制台控制权返回到客户端终端。

相关内容