use*_*680 8 bash parameter shell-script function
以下变量用于获取位置参数:
$1, $2, $3, etc.
$@
$#
Run Code Online (Sandbox Code Playgroud)
但是它们用于脚本的位置参数和函数的位置参数。
当我在函数内使用这些变量时,它们会给出函数的位置参数。
有没有办法从函数内部获取脚本的位置参数?
ilk*_*chu 10
不,不是直接的,因为函数参数掩盖了它们。但是在 Bash 或 ksh 中,您可以将脚本的参数分配给一个单独的数组,然后使用它。
#!/bin/bash
ARGV=("$@")
foo() {
echo "number of args: ${#ARGV[@]}"
echo "second arg: ${ARGV[1]}"
}
foo x y z
Run Code Online (Sandbox Code Playgroud)
请注意,数组的编号从零开始,因此$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
Run Code Online (Sandbox Code Playgroud)