可以将多少个参数传递给bash函数?
答
要访问函数的参数,你可以在它们之间迭代:
foo() {
for arg # "in [email protected]" is implied
do
echo $arg
done
}
或
bar() {
while [ $1 ]
do
echo $1
shift
done
}
或访问特定的参数:
baz() {
# for arguments above $9 you have to use curly braces
echo $1 $9 ${10} ${121375}
}
答
的数量是相当大的:
$ display_last_arg() { echo "${@: -1}"; }
$ getconf ARG_MAX
262144
$ display_last_arg {1..262145}
262145
$ echo $((2**18)) $((2**20))
262144 1048576
$ display_last_arg {1..1048576}
1048576
正如您所看到的,它大于the kernel ARG_MAX limit,这很有意义,因为Bash不会调用execve(2)
来调用Bash定义的函数。
我得到malloc
失败,如果我尝试执行2^32范围内的Bash序列扩展({1..NUM}
),所以有一个硬性限制的地方(可能你的机器上有所不同),但Bash是如此之慢,一旦你得到上述2^20个参数,在达到硬限制之前,你会达到性能极限。
我会说0或更多。 – leppie 2010-10-21 09:41:51