在函数定义中使用位置参数

4 bash parameter function

如何在函数声明中使用位置参数(从命令行给出)?

在函数定义中,$1 和 $2 是函数本身唯一的位置参数,而不是全局位置参数!

Sté*_*las 6

调用方作用域的位置参数在函数中不可用。您需要调用者以一种或另一种方式将它们传递给函数。

在 中bash,这可以用一个数组来完成(但要注意,除了"$@"in中的数组以外的数组bash从索引 0 而不是 1 开始(如 in ksh,但与所有其他外壳相反))。

f() {
  printf 'Caller $1: %s\n' "${caller_argv[0]}"
  printf '    My $1: %s\n' "$1"
}
caller_argv=("$@")
f blah
Run Code Online (Sandbox Code Playgroud)

或者另外传递它们:

f() {
  printf 'Caller $1: %s\n' "$2"
  shift "$(($1 + 1))"
  printf 'My $1: %s\n' "$1"
}

f "$#" "$@" blah
Run Code Online (Sandbox Code Playgroud)

这里$1包含调用者的位置参数的数量,所以f知道它自己的参数从哪里开始。