0

在以下 shell 脚本中,我无法设置包含空格的用户代理。我正在分词。第一个空格之后的位(即“(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

该问题在Bash FAQ中进行了解释

解决方案是稍微不同的语法。

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 回答