-2

如何通过用括号调用它来在shell中执行一个函数,即:

my_func()
{
    echo $0
    echo $1
} 

my_func("aa","bb")

不是那样的

my_func "aa" "bb"
4

3 回答 3

7

你不能。为什么要将其他语言的语法应用于 shell?

于 2013-03-06T18:30:58.937 回答
1

在大多数 shell 中,您不能包含 bash,(并且)除了空()表单之外,它是保留的控制运算符。您可以转义或引用,但这几乎没有用。

您可以稍微滥用{ } 大括号扩展

my_func {1,2,3}   

因为{1,2,3}扩展为“1 2 3”,尽管它也有其他功能。您必须确保其中没有(未引用的)空格,{1, 2, 3}并按原样处理。文字逗号必须被引用或\转义。你需要在函数名后面加一个空格,否则它会做一些完全不同的事情。

或者,如果您真的想玩游戏,也可能会被滥用,这与(aka )[ ]的工作方式并不完全不同,但会牺牲非平凡的解析。这是一个可以通过但不完美的例子,它说明了原因:[test

function my_func () 
{
   local IFS=" ,"
   set -- $*; 

   for ((ff=1; ff<=$#; ff++)); do
         printf "\$%i=<%s>  " $ff "${!ff}"
    done
    printf "\n"
}

my_func [ "a",b,c ]
my_func [ 1, 2 ,3 ]

bash不是tcl... 如果您尝试编写一个可作为两种或多种不同语言有效的程序,则应改为搜索多语言程序。

我仍在研究and替换{and}BEGINEND的方法。

于 2013-03-06T18:41:37.307 回答
1

如何通过用括号调用它来在 shell 中执行函数?

尝试这个:

my_func "(" ")"
于 2013-03-06T18:21:06.130 回答