单词拆分选项替换

时间:2013-03-26 20:55:10

标签: bash shell curl

在以下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

有人可以解释一下原因吗?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

从这里开始:http://wiki.bash-hackers.org/syntax/quoting

  

这些引号字符(“,双引号和',单引号)是影响解析的语法元素。它与作为文本传递给命令行的最终引号字符无关!语法引号在删除之前被删除命令被调用!

因此cmd "my args"myargs="\"my args\""; cmd $myargs之间存在根本区别。

答案 2 :(得分:-1)

尝试用%20替换空格

如果您愿意,可以在脚本中执行此操作:

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

希望这有帮助。