如何在 bash 中禁用路径名扩展?

Lek*_*eyn 4 bash auto-completion

假设我是一个懒惰的混混,并希望避免把每串用引号将参数传递给函数时,我该如何避免字符*?正在使用的bash为patname扩张呢?

简化示例:

fn () {
    echo "$1"
}
# shopt -s option - disable * and ?
fn not/*/expanded
fn neither\ should\ this/be/expanded?
fn 'accepted too*'
# shopt -u option - enable * and ?
Run Code Online (Sandbox Code Playgroud)

这应该输出:

not/*/expanded
neither should this/be/expanded?
accepted too*
Run Code Online (Sandbox Code Playgroud)

enz*_*tib 6

您正在寻找的选项是noglob并且应该使用内置的 shell 进行设置set

要启用它:

set -o noglob
Run Code Online (Sandbox Code Playgroud)

要禁用它:

set +o noglob
Run Code Online (Sandbox Code Playgroud)

或者也有set -fset +f

还有一种方法:

shopt -os noglob
Run Code Online (Sandbox Code Playgroud)

shopt -ou noglob
Run Code Online (Sandbox Code Playgroud)