是否有可能用括号
调用它用括号即调用它来执行在外壳的功能我怎样才能在shell中执行的函数:是否有可能用括号
my_func()
{
echo $0
echo $1
}
my_func("aa","bb")
,而不是像
my_func "aa" "bb"
在大多数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程序。
这只适用于不带引号的参数:尝试'my_func [“a b”,c,d]'。 – chepner 2013-03-06 19:55:45
如何在shell中调用括号来执行函数?
试试这个:
my_func "(" ")"
当然,将字符串'('和')'作为参数传递给函数。我确定你知道,但OP可能不会。 – 2013-03-06 18:31:08
@KeithThompson当然,我upvoted另一个答案,他值得一些代表:) – 2013-03-06 18:36:23
你不能。你为什么要将其他语言的语法应用到shell?
你不能。你为什么要将其他语言的语法应用到shell? – 2013-03-06 18:08:01
@MarkReed:发布那个答案。这是一个奇怪的问题,但有一个简单的答案。 – chepner 2013-03-06 18:16:47
你想解决什么问题?如果问题是“我不喜欢shell的函数调用语法”,那么问题不大 - 如果是这样,解决方案是使用其他语言,或编写自己的shell。 – 2013-03-06 18:32:14