bash 不区分大小写的命令匹配

ead*_*ter 3 command-line bash case-sensitivity

bash 是否可以以不区分大小写的方式查找命令?

例如。这些命令行将始终运行 python:

python
Python
PYTHON
pyThoN
Run Code Online (Sandbox Code Playgroud)

cof*_*Mug 5

一种方法是使用aliasshell 内置命令,例如:

alias Python='python'
alias PYTHON='python'
alias Python='python'
alias pyThoN='python'
Run Code Online (Sandbox Code Playgroud)

为了获得更好的方法,command_not_found_handle()可以按照这篇文章中的描述使用该函数:alias 中的 regex。例如,这将强制所有命令都小写:

command_not_found_handle() {
    LOWERCASE_CMD=$(echo "$1" | tr '[A-Z]' '[a-z]')
    shift
    command -p $LOWERCASE_CMD "$@"
    return $?
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,它不适用于内置命令,例如cd.

另外(如果你有 Bash 4.0)你可以在你的文件中添加一个小函数,.bashrc在执行之前将大写命令转换为小写。与此类似的东西:

function :() {
    "${1,,}"
}
Run Code Online (Sandbox Code Playgroud)

然后您可以通过在命令行中调用来运行该命令: Python

注意,正如 @cas 在评论中提到的, : 是 bash 的保留字。因此,为了避免不一致和问题,您可以将其替换为c或尚未保留的内容。