Bash
在函式定義中使用位置參數
如何在函式聲明中使用位置參數(從命令行給出)?
在函式定義中, $ 1 and $ 2 是函式本身的唯一位置參數,而不是全域位置參數!
呼叫者作用域的位置參數在函式中不可用。您需要呼叫者以一種或另一種方式將它們傳遞給函式。
在
bash
中,這可以通過數組來完成(但請注意,除"$@"
in之外的數組bash
從索引 0 而不是 1 開始(與 in 類似ksh
,但與所有其他 shell 相反))。f() { printf 'Caller $1: %s\n' "${caller_argv[0]}" printf ' My $1: %s\n' "$1" } caller_argv=("$@") f blah
或者另外傳遞它們:
f() { printf 'Caller $1: %s\n' "$2" shift "$(($1 + 1))" printf 'My $1: %s\n' "$1" } f "$#" "$@" blah
這裡
$1
包含呼叫者的位置參數的數量,所以f
知道它自己的參數從哪裡開始。
使用 bash,您可以使用 shell 變數 BASH_ARGV
shopt -s extdebug # create the array BASH_ARGV with the parameter of the script shopt -u extdebug # No more need of extdebug but BASH_ARGV is created f() { printf 'Caller $1: %s\n' ${BASH_ARGV[$((${#BASH_ARGV[*]}-1))]} printf ' My $1: %s\n' "$1" } f blah