[英]How to handle quotes in a shell script
從這個問題中,我能夠獲得Oracle JDK的wget網址。 我打算在腳本中使用它
wget_opts="-c --no-check-certificate --no-cookies --header --load-cookies="Cookie: oraclelicense=accept-securebackup-cookie""
jdk_download_url="http://download.oracle.com/otn-pub/java/jdk/7u55-b13/jdk-7u55-linux-x64.tar.gz"
/usr/bin/wget $wget_opts $jdk_download_url
當我回顯以上命令時,它看起來還可以,並且能夠正確下載文件。 但是在腳本中運行命令后,我得到以下內容
--2014-06-04 14:19:43-- http://oraclelicense=accept-securebackup-cookie%22/
Resolving oraclelicense=accept-securebackup-cookie"... failed: Name or service not known.
wget: unable to resolve host address “oraclelicense=accept-securebackup-cookie"”
--2014-06-04 14:20:03-- http://download.oracle.com/otn-pub/java/jdk/7u55-b13/jdk-7u55-linux-x64.tar.gz
Resolving download.oracle.com...
Wget獲取了錯誤的URL。
我該如何糾正?
使用數組:
wget_opts=( -c
--no-check-certificate
--no-cookies
--header
--load-cookies="Cookie: oraclelicense=accept-securebackup-cookie"
)
jdk_download_url="http://download.oracle.com/otn-pub/java/jdk/7u55-b13/jdk-7u55-linux-x64.tar.gz"
# use the exact quoting below
/usr/bin/wget "${wget_opts[@]}" "$jdk_download_url"
嘗試這個:
wget_opts='-c --no-check-certificate --no-cookies --header --load-cookies="Cookie: oraclelicense=accept-securebackup-cookie"'
jdk_download_url="http://download.oracle.com/otn-pub/java/jdk/7u55-b13/jdk-7u55-linux-x64.tar.gz"
/usr/bin/wget $wget_opts $jdk_download_url
檢查bash手冊中單引號和雙引號之間的差異。
編輯:實際上,您在wget命令行中有一些錯誤。 這是正確的行。
OPTS="-c --no-check-certificate --no-cookies --header Cookie:oraclelicense=accept-securebackup-cookie"
URL="http://download.oracle.com/otn-pub/java/jdk/7u55-b13/jdk-7u55-linux-x64.tar.gz"
wget $OPTS $URL
--load-cookies
選項將文件作為參數而不是string 。 我們必須對Cookie: oraclelicense=accept-securebackup-cookie
使用--header
選項Cookie: oraclelicense=accept-securebackup-cookie
。 經過測試,我發現wget
不在乎標題字段中的空格。 因此,我們可以直接使用Cookie:oraclelicense=accept-securebackup-cookie
如果使用--debug
選項,您將看到正確格式的請求:
GET /otn-pub/java/jdk/7u55-b13/jdk-7u55-linux-x64.tar.gz HTTP/1.1
Range: bytes=5307-
User-Agent: Wget/1.15 (linux-gnu)
Accept: */*
Host: download.oracle.com
Connection: Keep-Alive
Cookie: oraclelicense=accept-securebackup-cookie
您需要轉義其他雙引號內的雙引號:
wget_opts="-c --no-check-certificate --no-cookies --header --load-cookies=\"Cookie: oraclelicense=accept-securebackup-cookie\""
或者,如果不需要變量插值,則將字符串用單引號引起來:
wget_opts='-c --no-check-certificate --no-cookies --header --load-cookies="Cookie: oraclelicense=accept-securebackup-cookie"'
此外,在您的命令中,您需要在jdk_download_url
前面加一個$
:
/usr/bin/wget $wget_opts $jdk_download_url
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.