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