如何在bash中转义通配符/星号字符?

如何在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”?


慕码人8056858
浏览 1157回答 3
3回答

江户川乱折腾

设置$ FOO时引用是不够的。您还需要引用变量引用:me$ FOO="BAR * BAR"me$ echo "$FOO"BAR * BAR

慕婉清6462132

我将为这个旧线程添加一些内容。通常你会用$ echo "$FOO"但是,即使使用这种语法,我也遇到了问题。请考虑以下脚本。#!/bin/bashcurl_opts="-s --noproxy * -O"curl $curl_opts "$1"在*需要传递逐字到curl,但也会出现同样的问题。上面的例子不起作用(它将扩展到当前目录中的文件名),也不会\*。您也无法引用,$curl_opts因为它将被识别为单个(无效)选项curl。curl: option -s --noproxy * -O: is unknowncurl: try 'curl --help' or 'curl --manual' for more information因此,如果应用于全局模式,我建议使用该bash变量$GLOBIGNORE来完全防止文件名扩展,或者使用set -f内置标志。#!/bin/bashGLOBIGNORE="*"curl_opts="-s --noproxy * -O"curl $curl_opts "$1"  ## no filename expansion应用于您的原始示例:me$ FOO="BAR * BAR"me$ echo $FOOBAR file1 file2 file3 file4 BARme$ set -fme$ echo $FOOBAR * BARme$ set +fme$ GLOBIGNORE=*me$ echo $FOOBAR * BAR
打开App,查看更多内容
随时随地看视频慕课网APP