发送带有单引号字符的 SMS 文本时出现问题 - mmcli (ModemManager)

发送带有单引号字符的 SMS 文本时出现问题 - mmcli (ModemManager)

这是联机帮助页中的示例mmcli

mmcli -m 0 --messaging-create-sms="text='Hello world',number='+1234567890'"

如何解析它的细节尚不清楚,描述仅说明--messaging-create-sms=['KEY1=VALUE1,...']并列出了已知的键。键的值text是 UTF-8 消息文本。

这是我的脚本中的相应行:

mmcli -m $modem --messaging-create-sms="text='$msg',number='$num'"

问题是消息中不能包含单引号。错误是:

'GDBus.Error:org.freedesktop.ModemManager1.Error.Message.InvalidPduParameter: 无法将消息文本转换为 GSM'

目前我正在用双引号替换它。我尝试过反斜杠转义,但没有成功。能否请你帮忙?

答案1

也许进行解析的代码是这里

/* Expecting input as:
 *   key1=string,key2=true,key3=false...
 * Strings may also be passed enclosed between double or single quotes, like:
 *   key1="this is a string", key2='and so is this' */
gboolean mm_common_parse_key_value_string(...)

因此,如果文本中没有双引号和单引号,则可以在参数中使用相反的引号,例如:

case "$msg" in
*\'*\"*|*\"*\'*) echo oops; exit 1 ;;
*\'*)   q=\" ;;
*\"*)   q=\' ;;
esac

... --messaging-create-sms="text=$q$msg$q,number='$num'"

答案2

有点晚了,但我最近遇到了同样的问题。我需要支持可以包含单引号和双引号的消息,这对于当前的字符串解析来说是不可能的。我想我应该自己修复它并分叉存储库这里并添加了一个命令行选项,--messaging-create-sms-with-text它允许您从文件(可以是标准输入)读取消息文本。该选项的工作原理与 类似--messaging-create-sms-with-data

我已经完成了拉取请求,但该项目似乎不是很活跃(上次提交是 2021 年 11 月 4 日)。我们拭目以待。

编辑:该项目托管于FreeDesktop自己的gitlab。我只是假设它在 GitHub 上。我的错 :)

我的改变此后已被接受。

相关内容