簡體   English   中英

如何在Shell腳本中處理引號

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM