Bash
有沒有辦法從bash的函式內部獲取腳本的位置參數?
以下變數用於獲取位置參數:
$1, $2, $3, etc. $@ $#
但它們用於腳本的位置參數和函式的位置參數。
當我在函式中使用這些變數時,它們會給我函式的位置參數。
有沒有辦法從函式內部獲取腳本的位置參數?
不,不是直接的,因為函式參數掩蓋了它們。但是在 Bash 或 ksh 中,您可以將腳本的參數分配給單獨的數組,然後使用它。
#!/bin/bash ARGV=("$@") foo() { echo "number of args: ${#ARGV[@]}" echo "second arg: ${ARGV[1]}" } foo x y z
請注意,數組的編號從零開始,
$1
等等${ARGV[0]}
。
使用 bash 獲取腳本參數的另一種方法是使用 Shell 變數 BASH_ARGC 和 BASH_ARGV
#!/bin/bash shopt -s extdebug test(){ echo 'number of element in the current bash execution call stack = '"${#BASH_ARGC[*]}" echo 'the script come with '"${BASH_ARGC[$((${#BASH_ARGC[*]}-1))]}"' parameter(s)' echo 'the first is '"${BASH_ARGV[$((${#BASH_ARGV[*]}-1))]}" echo 'there is 2 way to get the parameters of this function' echo 'the first is to get $1,...,$n' echo '$1 = '"$1" echo '$2 = '"$2" echo 'the second with the use of BASH_ARGC and BASH_ARGV' echo 'this function '"${FUNCNAME[0]}"' come with '"${BASH_ARGC[0]}"' parameter(s)' echo 'the second is '"${BASH_ARGV[0]}" echo 'the first is '"${BASH_ARGV[1]}" } essai(){ test paramtest1 "$3" } essai paramessai1 paramessai2 paramessai3