创建256个执行相同操作的函数 - 创建不区分大小写的函数 - 将所有参数传递给函数的一个班轮?

Hel*_*elp 2 linux macos bash terminal function

我想创建256个执行相同操作的函数

基本上我想要一个能够不区分大小写的函数.

示例:我希望applepie()能够不区分大小写地调用:

applepie(){

for B in "$@";
do
another_function_in_my_bash_profile $B
blah blah 
# more stuff ...   
done

}
Run Code Online (Sandbox Code Playgroud)

最直接的方法是声明另外255个函数,其中包含一些字母:

Applepie(){

for B in "$@";
do
another_function_in_my_bash_profile $B
blah blah 
# more stuff ...   
done

}
Run Code Online (Sandbox Code Playgroud)

aPplepie(){

for B in "$@";
do
another_function_in_my_bash_profile $B
blah blah 
# more stuff ...   
done

}
Run Code Online (Sandbox Code Playgroud)

...

一直到

APPLEPIE(){

for B in "$@";
do
another_function_in_my_bash_profile $B
blah blah 
# more stuff ...   
done

}
Run Code Online (Sandbox Code Playgroud)

它们总共有256个(2个为8的幂)

是否可以快速完成?或者是否有更"内置"的方法

case-insensitive appelepie(){

for B in "$@";
do
another_function_in_my_bash_profile $B
blah blah 
# more stuff ...   
done

}
Run Code Online (Sandbox Code Playgroud)

或者是否可以这样做

case-insensitive APPLEPIE(){
  command -pass_all_parameters applepie
}
Run Code Online (Sandbox Code Playgroud)

可以将所有参数传递给applepie而不是使用for循环for B in "$@";

che*_*ner 6

您可以通过定义全小写函数名称伪造不区分大小写的函数名称,并使用bash陷阱来丢失命令名称(需要bash4,您需要在OS X上自行安装):

command_not_found_handle () {
    cmd_name=${1,,}
    shift
    $cmd_name "$@"
}
Run Code Online (Sandbox Code Playgroud)

因此,如果apple是函数,但是您尝试将其称为ApPlE,command_not_found_handle则使用命令作为参数调用.第一行采用第一个参数(ApPlE)并将其小写.然后它尝试apple使用原始参数运行.