Pau*_*ce. 12
要访问函数中的参数,可以迭代它们:
foo () {
for arg # "in $@" is implied
do
echo $arg
done
}
Run Code Online (Sandbox Code Playgroud)
要么
bar () {
while [ $1 ]
do
echo $1
shift
done
}
Run Code Online (Sandbox Code Playgroud)
或访问特定参数:
baz () {
# for arguments above $9 you have to use curly braces
echo $1 $9 ${10} ${121375}
}
Run Code Online (Sandbox Code Playgroud)
数量相当大:
$ 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
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,它大于内核ARG_MAX限制,这是有道理的,因为Bash不会调用execve(2)来调用Bash定义的函数.
malloc如果我尝试{1..NUM}在2 ^ 32范围内执行Bash sequence expansion(),我会失败,所以某处有一个硬限制(可能在你的机器上有所不同),但是一旦你超过2 ^ 20个参数,Bash就会很慢,在达到硬限制之前,你会达到性能极限.
| 归档时间: |
|
| 查看次数: |
8186 次 |
| 最近记录: |