我可以将多少个参数传递给bash函数?

时间:2010-10-21 09:39:17

标签: bash

bash函数可以接受的参数数量是否有限?

3 个答案:

答案 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)

bash manual说:

  

尺寸没有最大限制   一个数组,也没有任何要求   成员被索引或分配   连续。

我认为这适用,因为函数参数表示为数组。

答案 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个参数,你就会变得如此缓慢,以至于你在达到硬限制之前就会达到性能极限。