【发布时间】:2019-12-24 00:08:57
【问题描述】:
我需要编写一个 bash 脚本,它将在 Android 设备上执行。除此之外,我需要这个脚本来计算字符串中特定字符的出现次数,因为wc(字数统计)实用程序在 Android shell 中不可用,我这样做是这样的:
my_string="oneX two threeX"; x_amount="${my_string//[^X]}"; echo $x_amount; echo "${#x_amount}"
当我在桌面上运行上述命令时,它会返回(正如我所料):
XX
2
但如果我在我的 Android 设备上执行相同的命令(通过adb shell),结果令我惊讶的是:
one two three
13
我已经知道(只是猜测)如果我用! 代替^,那么命令就变成了:
my_string="oneX two threeX"; x_amount="${my_string//[!X]}"; echo $x_amount; echo "${#x_amount}";
然后,在 Android 上,它会产生我期望的结果:
XX
2
虽然相同的命令在桌面上失败并显示以下消息:
event not found: X]
即使我已经弄清楚如何“让它发挥作用”,我还是想了解以下几点:
除了Android shell,还有什么地方使用
[!X]而不是[^X]?这种表示法有什么特殊名称吗?
Android 不支持
[^X]是否有任何具体原因?
PS:我需要在其上运行脚本的设备具有相当旧版本的 Android (4.4),所以这个“问题”可能是特定于 Android 版本的,即使是这种情况,问题以上保留。
【问题讨论】:
-
您正在使用
${my_string//[!X]},这是一个不使用正则表达式的参数扩展,仅使用括号表达式和POSIX 字符类。它用于 *NIX shell,例如在巴什。 Android 中可能有语法变化。
标签: android regex bash adb regex-negation