2013-03-26 57 views
0

在以下shell脚本中,我无法设置带有空格的用户代理。我正在分词。第一空间(即“(Macintosh的;”后位)是由卷曲解释为URLWord拆分选项替换

如果我在键入到控制台它的工作不错,但不是当我使用替换

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

尝试在dbl引号内使用单引号将用户代理“分组”。即'PARAMS =“$ {PARAMS} ....'mozz ....'”'祝你好运。 – shellter 2013-03-26 21:43:14

回答

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

尝试用%替代空间20

,如果你想喜欢,你可以在脚本中做到这一点:?

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

希望这会有所帮助。

0

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

这些引号(”双引号和”,单引号)是影响解析语法元素,它不涉及到作为文本传递给最终的引号字符。命令行!语法引号被删除被称为命令之前!

所以有cmd "my args"myargs="\"my args\""; cmd $myargs之间的根本区别。