调用方作用域的位置参数在函数中不可用。您需要调用者以一种或另一种方式将它们传递给函数。
在 中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知道它自己的参数从哪里开始。