Quoting

發送帶有單引號字元的 SMS 文本時出現問題 - mmcli (ModemManager)

  • May 16, 2020

這是手冊頁中的一個範例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’

目前我正在用雙引號替換它。我嘗試了反斜杠轉義,但沒有奏效。能否請你幫忙?

也許進行解析的程式碼在這裡

/* 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'"

引用自:https://unix.stackexchange.com/questions/587105