0

テスト スクリプトでは、"curl" コマンドを何度も使用しています。コードを最適化するために、「curl」のオプションをグローバル変数で実行したい。

「curl」の使用条件を読みましたが、スペースを含むパラメーターを渡すには、単一引用符で囲む必要があると書かれています。

しかし、それは機能していません。

$ curl_options="-i -L -k -S --connect-timeout 30 --user-agent 'Opera/9.80 (Windows NT 6.1; WOW64) Presto/2.12.388 Version/12.14'"
$ curl $curl_options "http://google.com"

出力結果:

curl: (6) Couldn't resolve host'' Opera ' 
curl: (6) Couldn't resolve host '(Windows' 
curl: (6) Couldn't resolve host 'NT' 
curl: (6) Couldn't resolve host '6 .1; ' 
curl: (6) Couldn't resolve host 'WOW64)' 
curl: (6) Couldn't resolve host 'Presto' 
curl: (6) Couldn't resolve host 'Version'
4

1 に答える 1

3

ではbash、配列を使用する必要があります。このように、文字列内のスペースがオプションの一部であるかどうか、または 2 つのオプションを区切るかどうかを心配する必要はありません。

curl_options=( ... )
curl_options+=( "--user-agent" "Opera/9.80 (Windows NT 6.1; WOW64) Presto/2.12.388 Version/12.14")

curl "${curl_options[@]}" "http://google.com"

配列を使用できない場合 (たとえば、使用しているシェルで配列を使用できない場合)、次の使用にフォールバックする必要がありますeval

$ curl_options="-i -L -k -S --connect-timeout 30 --user-agent 'Opera/9.80 (Windows NT 6.1; WOW64) Presto/2.12.388 Version/12.14'"
$ eval "curl $curl_options http://google.com"

これは理想的ではありません。 の値を設定する方法には十分注意する必要があるcurl_optionsためです。シェルは、 に渡された文字列に値を挿入して実行するだけです。タイプミスは、意図しない結果をもたらす可能性があります。evalevaleval

于 2013-03-28T13:41:16.247 に答える