4
下面给出的上下文
确实任何魔法语法存在,可以在$ WGETOPT的定义被插入以允许$ USERAGENT变量是“吸收”,并且仍然允许用于向wget命令作为一个呼叫在语法1?我目前使用'eval',我不满意,但也许这是我能做到我想要在这里的唯一途径?!
#params
USERAGENT="Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"
PROXYSWITCH=off
WGET=wget
WGETOPT="--cut-dirs=3 -r -l10 -dnv -x -H --timestamping --limit-rate=100K --proxy=$PROXYSWITCH -U \"$USERAGENT\""
WGETOPTminusUSERAGENT="-cut-dirs=3 -r -l10 -dnv -x -H --timestamping --limit-rate=100K --proxy=$PROXYSWITCH"
URL=http://blah
#commands
#1.
$WGET $WGETOPT $URL
#2.
$WGET "$WGETOPT" $URL
#3.
eval "$WGET $WGETOPT $URL"
#4.
$WGET $WGETOPTminusUSERAGENT -U "$USERAGENT" $URL
#1。结果在:
DEBUG output created by Wget 1.11.4 on Windows-MinGW.
Enqueuing http://(compatible;/ at depth 0
Queue count 1, maxcount 1.
Host `(compatible;' has not issued a general basic challenge.
...
Setting --user-agent (useragent) to "Mozilla/4.0
...
这很明显,为什么“\”没有'生存'的bash解释器。
#2。结果:
wget: --cut-dirs: Invalid number `3 -r -l10 -dnv -x -H --timesta.. ..indows NT 5.1)"'.'
这里,双引号导致被通过的唯一参数,wget的分析从一个命名的参数,然后假设(正确地)剩下的就是它的参数,无论空白。
#3。作品,我正在使用它,但我确实记得使用邪恶/ eval被惩罚!
#4。我会假设工作正常,我没有测试它,因为这不是我想要做的!
..从这个问题来看。
欢呼
谢谢。我没有想到这件事是痛苦的。我更关注双引号问题,而不是程序想要的arg数组。 'eval'分析字符串的参数(考虑引号/双引号)的方式对我来说当然看起来更自然,但是我想,反过来说,bash的方式实际上是一个功能,我用它来很多年没有真正想到它。 – elbeardmorez 2011-06-08 07:09:33