鉴于下面的上下文..
是否存在任何可以插入到 $WGETOPT 定义中的神奇语法,以允许“吸收”$USERAGENT 变量,并且仍然允许调用 wget 命令,如下所示syntax 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。有效,我正在使用它,但我确实记得因使用邪恶/评估而受到惩罚!
#4。我假设工作正常,我没有测试它,因为那不是我想要的方式!
..因此就有这个问题。
cheers
放大@Ignacio的答案:如果我理解这里的目标,最好的答案是将选项存储在数组中。
#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")
$WGET "${WGETOPT[@]}" "$URL"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)