【发布时间】:2015-12-03 15:57:20
【问题描述】:
我有一个将 SMS 转发给它的脚本,并将其中的一些数据发布到 PHP 脚本。下面是我的 Bash 脚本:
#!/bin/bash
# Script to post data to Top up processor
curl --request POST 'http://127.0.0.1/user//topup/process.php' --data "receipt=$1" --data "username=$9"
所以运行它:
./mpesa_topup.sh sms_message
但是短信服务器用单引号转发消息:
./mpesa_topup.sh 'sms_message'
脚本最终“将整个 SMS 解析为 1 个位置参数。这是 sms 服务器运行脚本时发生的调试。
root@sms:/var/lib/playsms/sms_command/1# bash -x mpesa_topup.sh 'JJA88QHC22 Confirmed.on 101015 at 9:49 PMKsh25.00 received from 254712345678 SOME BODY.New Account balance is Ksh25.00'
+ curl --request POST http://10.5.1.2/topup/process.php --data 'receipt=JJA88QHC22 Confirmed.on 101015 at 9:49 PMKsh25.00 received from 254722227332 JOTHAM KIIRU.New Account balance is Ksh25.00' --data username=
root@sms:/var/lib/playsms/sms_command/1#
有没有办法删除/忽略 Bash 脚本中的开始和结束单引号?
PS : 我不是程序员,是在我的朋友 Google 的帮助下才走到今天的。
【问题讨论】:
-
当你调用它时不要在它周围加上引号,如果你在调用命令时把它放在它周围,那么引号的意思是“把它当作一个参数”如果你不加引号, 分词发生分配位置参数
-
当你 dbl 引用一个变量时,就像你对
--data "receipt=$1"所做的那样,当你使用 shell 调试(set -x)时,shell “规范化”所有引用到它的“最终”表示执行,因此在调试输出中使用单引号。因此,如果您不想在--data "receipt=$1"周围出现任何引号,请删除它们。即使您在$1内使用 '\' 字符引用了转义空格,set -x也会将该变量显示为带引号的单引号。祝你好运。