繁体   English   中英

如何在bash脚本中传递变量的双引号值作为curl命令的参数?

[英]How to pass a double quoted value of a variable, as argument of the curl command, in a bash script?

我在服务器上有一个脚本,该脚本的最后一行是回显,它会打印如下所示的URL值:

.
.     < the script code here >
.
echo "url"      # The last line of this script

我没有可能更改此脚本,我只能捕获其返回值,也就是说,将URL作为返回值捕获到本地bash脚本中声明的变量中,如下所示:

cmd_url=$(ssh . . . <distinct script>)

这是此类URL的示例(出于保密原因,我当然更改了值)

http://mydomain:56789/cgi-bin/WebObjects/JavaMonitor.woa/admin/running?type=app&name=AppTest&pw=abcd&9e0Xy

上面的示例主要是WebObjects应用程序信息URL,可以将其作为curl命令的参数传递,以了解应用程序是否正在运行(因此,此示例中的应用程序名称为AppTest和我必须提供的JavaMonitor密码为了能够查询是abcd&9e0Xy

如果打开终端,我可以简单地将此URL粘贴在单引号中并运行以下命令

curl -s -X GET 'http://mydomain:56789/cgi-bin/WebObjects/JavaMonitor.woa/admin/running?type=app&name=AppTest&pw=abcd9e0Xy'

因此,我必须将字符串括在单引号中,以转义特殊字符,并且效果很好,如果应用程序AppTest实际上正在运行,则curl返回YES

现在,我需要做的就是做我上面写的事情,除了它是在bash脚本内完成的,并且url不是手动编写在单引号内,而是存储在变量内。

这是我的工作:

cmd_url=$(ssh . . . <distant script>)
ret_msg=$(curl -s -X GET "$cmd_url")

问题是(我想)是由于URL中的特殊字符。 似乎curl无法正确解释该参数。 我什至删除了双引号,但这也不能解决问题。

所以我的问题是:我应该如何进行? 如何将已经用双引号引起来的字符串(请记住,这是在远程服务器上完成的,并且我无法更改)转换为单引号引起来的字符串? 这样,curl就可以将其当作字符序列,而无需解释它们吗? 就像我在终端示例中上面写的一样:

'http://mydomain:56789/cgi-bin/WebObjects/JavaMonitor.woa/admin/running?type=app&name=AppTest&pw=abcd9e0Xy'

到目前为止,我已经尝试过用单引号将可能的连接进行不同的组合,但是问题仍然存在。 curl根本不返回任何东西,或者我收到一条错误消息,指示未提供密码。

任何想法? 如何在bash脚本中传递已经双引号的局部变量来卷曲?

提前致谢

您可以使用tr将双引号转换为单引号

$ echo \"foo\" | tr '"' "'"
'foo'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM