是否可以通过用括号调用shell来执行函数

时间:2013-03-06 18:07:29

标签: linux bash shell

如何通过括号括起来在shell中执行函数,即:。

my_func()
{
    echo $0
    echo $1
} 

my_func("aa","bb")

而不是那样

my_func "aa" "bb"

3 个答案:

答案 0 :(得分:7)

你做不到。为什么要将一些其他语言的语法应用于shell?

答案 1 :(得分:1)

  

如何通过括号括起来在shell中执行函数?

试试这个:

my_func "(" ")"

答案 2 :(得分:1)

在大多数shell中,除了空(形式的保留控件操作符之外,)()不能包含bash。你可以逃避或引用,但这几乎没用。

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

my_func {1,2,3}   

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

或者,如果你真的想玩游戏,[ ]也可能被滥用,与[(又名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 ...如果您正在尝试编写有效为两种或更多种语言的程序,则应搜索polyglot程序。

我仍然在前往replace { and } with BEGIN and END