在以下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
有人可以解释一下原因吗?
答案 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' );
希望这有帮助。