2013-03-06 29 views
-2

调用它用括号即调用它来执行在外壳的功能我怎样才能在shell中执行的函数:是否有可能用括号

my_func() 
{ 
    echo $0 
    echo $1 
} 

my_func("aa","bb") 

,而不是像

my_func "aa" "bb" 
+8

你不能。你为什么要将其他语言的语法应用到shell? – 2013-03-06 18:08:01

+0

@MarkReed:发布那个答案。这是一个奇怪的问题,但有一个简单的答案。 – chepner 2013-03-06 18:16:47

+0

你想解决什么问题?如果问题是“我不喜欢shell的函数调用语法”,那么问题不大 - 如果是这样,解决方案是使用其他语言,或编写自己的shell。 – 2013-03-06 18:32:14

回答

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 ] 

bashtcl ......如果你想编写一个程序,它是两种或两种以上不同的语言有效,则应该寻找polyglot程序。

我还在努力去replace { and } with BEGIN and END

+0

这只适用于不带引号的参数:尝试'my_func [“a b”,c,d]'。 – chepner 2013-03-06 19:55:45

1

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

试试这个:

my_func "(" ")" 
+0

当然,将字符串'('和')'作为参数传递给函数。我确定你知道,但OP可能不会。 – 2013-03-06 18:31:08

+0

@KeithThompson当然,我upvoted另一个答案,他值得一些代表:) – 2013-03-06 18:36:23

7

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

相关问题