如何通过用括号调用它来在shell中执行一个函数,即:
my_func()
{
echo $0
echo $1
}
my_func("aa","bb")
不是那样的
my_func "aa" "bb"
你不能。为什么要将其他语言的语法应用于 shell?
在大多数 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}
BEGIN
END
的方法。
如何通过用括号调用它来在 shell 中执行函数?
尝试这个:
my_func "(" ")"