2010-10-21 70 views

回答

4

bash manual說:

有上的陣列的大小 沒有最大限制,也不是 構件被索引或分配 連續的任何要求。

我相信這適用,因爲函數參數是以數組的形式呈現的。

10

要訪問函數的參數,你可以在它們之間迭代:

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} 
} 
4

的數量是相當大的:

$ 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個參數,在達到硬限制之前,你會達到性能極限。

相關問題