如何在bash中转义通配符/星号字符?例如。me$ FOO="BAR * BAR"me$ echo $FOO
BAR file1 file2 file3 file4 BAR并使用“\”转义字符:me$ FOO="BAR \* BAR"me$ echo $FOO
BAR \* BAR我显然做了一些愚蠢的事。如何获得输出“BAR * BAR”?
3 回答
慕婉清6462132
TA贡献1804条经验 获得超2个赞
我将为这个旧线程添加一些内容。
通常你会用
$ echo "$FOO"
但是,即使使用这种语法,我也遇到了问题。请考虑以下脚本。
#!/bin/bash
curl_opts="-s --noproxy * -O"
curl $curl_opts "$1"
在*需要传递逐字到curl,但也会出现同样的问题。上面的例子不起作用(它将扩展到当前目录中的文件名),也不会\*。您也无法引用,$curl_opts因为它将被识别为单个(无效)选项curl。
curl: option -s --noproxy * -O: is unknown
curl: try 'curl --help' or 'curl --manual' for more information
因此,如果应用于全局模式,我建议使用该bash变量$GLOBIGNORE来完全防止文件名扩展,或者使用set -f内置标志。
#!/bin/bash
GLOBIGNORE="*"
curl_opts="-s --noproxy * -O"
curl $curl_opts "$1" ## no filename expansion
应用于您的原始示例:
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
添加回答
举报
0/150
提交
取消