从Bash中的函数中访问位置参数

从Bash中的函数中访问位置参数,bash,Bash,在bash脚本文件中,是否有一种方法可以在具有参数的函数中使用命令行参数 或者我是否需要将所有命令行参数指定给一个变量,以便在函数体中访问它们 echo$1可能是“abc” 函数f(){$1;}#将是“def”,但这里需要“abc” f“def” PS:我发现了堆栈溢出,但这个问题与我在这里描述的问题无关?SCRIPT\u ARG=$1 函数f(){ FUNC_ARG=$1; echo$SCRIPT_ARG#打印“abc” echo$FUNC_ARG打印“def” } f“def” 仅就记

在bash脚本文件中,是否有一种方法可以在具有参数的函数中使用命令行参数

或者我是否需要将所有命令行参数指定给一个变量,以便在函数体中访问它们


echo$1可能是“abc”
函数f(){$1;}#将是“def”,但这里需要“abc”
f“def”

PS:我发现了堆栈溢出,但这个问题与我在这里描述的问题无关?

SCRIPT\u ARG=$1
函数f(){
FUNC_ARG=$1;
echo$SCRIPT_ARG#打印“abc”
echo$FUNC_ARG打印“def”
}
f“def”

仅就记录而言,这在模式和变量中是可能的,但使用位置参数填充全局数组要容易得多,而且没有副作用

$ bash -O extdebug -s foo bar
$ f() {
>   declare -p BASH_ARGC BASH_ARGV
>   echo ${BASH_ARGV[BASH_ARGC[0] + BASH_ARGC[1] - 1]}
> }
$ f 42 69
declare -a BASH_ARGC=([0]="2" [1]="2")
declare -a BASH_ARGV=([0]="69" [1]="42" [2]="bar" [3]="foo")
foo

只需使用
f“$1”
AFAIK,就无法从shell函数中访问脚本级命令行参数。函数中的
$1
$@
$*
的含义被函数的上下文覆盖。您可以在包含命令行参数的函数外部创建一个数组–
args=(“$@”)
,并在函数中引用该数组。