[英]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.