Mac OS X发送adb shell am开始意图字符串extra with space characters

mac*_*arz 2 terminal android adb

我有一个问题,涉及使用Mac OS X终端上的Activity Manager发送包含空格字符的字符串额外的意图.

以下命令:

adb shell am start -n com.example.package/.Activity -e 'KEY' 'String with spaces'
Run Code Online (Sandbox Code Playgroud)

...给:

Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] pkg=with cmp=com.example.package/.Activity (has extras) }
Run Code Online (Sandbox Code Playgroud)

...并且只有"String"实际传递给Activity.

我可以通过使用反斜杠转义空格来解决这个问题:

adb shell am start -n com.example.package/.Activity -e 'KEY' 'String\ with\ spaces'
Run Code Online (Sandbox Code Playgroud)

...给:

Starting: Intent { cmp=com.example.package/.Activity (has extras) }
Run Code Online (Sandbox Code Playgroud)

...和"带空格的字符串"传递给Activity,因此它按预期工作.

问题是转义空间会限制我的脚本与Ubuntu终端的兼容性.在Ubuntu的这种情况下,"String\with\spaces"被传递给活动.

有没有办法迫使Mac OS终端解释字符串额外包含空格,如Ubuntu终端吗?

mac*_*arz 8

我在一个队友的帮助下弄清楚了.这是Ubuntu终端实际上​​有错.在第一种情况下,在将命令发送到adb shell之前,单引号会被本地shell剥离.这就是它在设备shell中执行的原因:

am start -n com.example.package/.Activity -e KEY String with spaces
Run Code Online (Sandbox Code Playgroud)

......结果是人们所期待的.

该问题的一个解决方案是将整个命令包装在应用于单引号的设备shell中,并使用双引号来包装字符串,如下所示:

adb shell 'am start -n com.example.package/.Activity -e "KEY" "String with spaces"'
Run Code Online (Sandbox Code Playgroud)

这在Ubuntu和Mac终端上都能正常工作.