bash函数可以接受的参数数量是否有限?
答案 0 :(得分:12)
要访问函数中的参数,可以迭代它们:
foo () {
for arg # "in $@" 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}
}
答案 1 :(得分:5)
答案 2 :(得分:5)
数字相当大:
$ 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定义的函数。
如果我尝试在2 ^ 32范围内执行Bash序列扩展(malloc
),则会出现{1..NUM}
失败,因此某处存在硬限制(可能会因您的计算机而异),但Bash一旦你超过2 ^ 20个参数,你就会变得如此缓慢,以至于你在达到硬限制之前就会达到性能极限。