3 回答

TA貢獻1851條經(jīng)驗 獲得超5個贊
設(shè)置$ FOO時引用是不夠的。您還需要引用變量引用:
me$ FOO="BAR * BAR"
me$ echo "$FOO"
BAR * BAR

TA貢獻1804條經(jīng)驗 獲得超2個贊
我將為這個舊線程添加一些內(nèi)容。
通常你會用
$ echo "$FOO"
但是,即使使用這種語法,我也遇到了問題。請考慮以下腳本。
#!/bin/bash
curl_opts="-s --noproxy * -O"
curl $curl_opts "$1"
在*需要傳遞逐字到curl,但也會出現(xiàn)同樣的問題。上面的例子不起作用(它將擴展到當(dāng)前目錄中的文件名),也不會\*。您也無法引用,$curl_opts因為它將被識別為單個(無效)選項curl。
curl: option -s --noproxy * -O: is unknown
curl: try 'curl --help' or 'curl --manual' for more information
因此,如果應(yīng)用于全局模式,我建議使用該bash變量$GLOBIGNORE來完全防止文件名擴展,或者使用set -f內(nèi)置標(biāo)志。
#!/bin/bash
GLOBIGNORE="*"
curl_opts="-s --noproxy * -O"
curl $curl_opts "$1" ## no filename expansion
應(yīng)用于您的原始示例:
me$ FOO="BAR * BAR"
me$ echo $FOO
BAR file1 file2 file3 file4 BAR
me$ set -f
me$ echo $FOO
BAR * BAR
me$ set +f
me$ GLOBIGNORE=*
me$ echo $FOO
BAR * BAR
添加回答
舉報