0

次のシェルスクリプトでは、スペースを含むユーザーエージェントを設定できません。単語が分かれています。最初のスペースの後のビット(つまり、 "(Macintosh;")は、curlによってURLとして解釈されています。

コンソールに入力すると正常に機能しますが、置換を使用すると機能しません。

PARAMS="-v"
PARAMS="${PARAMS} --user-agent \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/536.28.10 (KHTML, like Gecko)\"" #does not work
#PARAMS="${PARAMS} --user-agent \"Mozilla/5.0\"" #works

curl ${PARAMS} $1 > results.txt

誰かが理由を説明できますか?

4

3 に答える 3

1

問題はBashFAQで説明されています

解決策は少し異なる構文です。

PARAMS=(-v)
PARAMS+=( "-A Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/536.28.10 (KHTML, like Gecko)")
curl "${PARAMS[@]}" $1 > results.txt
于 2013-03-26T21:45:55.060 に答える
0

ここから:http ://wiki.bash-hackers.org/syntax/quoting

これらの引用符( "、二重引用符および'、一重引用符)は、解析に影響を与える構文要素です。コマンドラインにテキストとして渡される最終的な引用符とは関係ありません!構文引用符は、コマンドが呼び出される前に削除されます。 !!

したがって、との間には根本的な違いがcmd "my args"ありmyargs="\"my args\""; cmd $myargsます。

于 2013-03-26T21:32:02.033 に答える
-1

スペースを%20に置き換えてみてください

必要に応じて、スクリプトでこれを行うことができます。

str_replace ( ' ', '%20', 'what you need here' );

お役に立てれば。

于 2013-03-26T21:21:55.513 に答える