Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 具有三个到无穷多个参数的bash函数_Linux_Bash_Positional Parameter - Fatal编程技术网

Linux 具有三个到无穷多个参数的bash函数

Linux 具有三个到无穷多个参数的bash函数,linux,bash,positional-parameter,Linux,Bash,Positional Parameter,让我们假设我有一些python argparse脚本,我想使用bash函数将其命名为别名 假设此python脚本包含四个参数: --arg1 --arg2 --arg3 --arg4 我想要实现的是在固定位置获取前两个参数,然后无限添加可选参数 function foo() { python3 script.py --arg1 "$1" --arg2 "$2" "$@"; } 比如说: foo value1 value2 --arg3 value3 --arg4 value4 但是,

让我们假设我有一些python argparse脚本,我想使用bash函数将其命名为别名

假设此python脚本包含四个参数:

--arg1
--arg2
--arg3
--arg4
我想要实现的是在固定位置获取前两个参数,然后无限添加可选参数

function foo()  {  python3 script.py --arg1 "$1" --arg2 "$2" "$@";  }
比如说:

foo value1 value2 --arg3 value3 --arg4 value4
但是,$@从1开始计数

如何实现这一点?

将$1和$2保存到局部变量,然后使用shift将变量移位,使$@不再包含它们。

将$1和$2保存到局部变量,然后使用shift将变量移位,使$@不再包含它们。

$@确实是Bash中的一个数组,因此,您可以使用语法${@:start:length}访问任意项目:

函数foo{ python3 script.py-arg1$1-arg2$2${@:3} } 这里,当省略长度时,假定长度足以包含所有剩余项

shift then use$@是另一种选择:

函数foo{ arg1=$1 arg2=2美元 班次2 python3 script.py-arg1$arg1-arg2$arg2$@ } $@实际上是Bash中的一个数组,因此您可以使用语法${@:start:length}访问任意项:

函数foo{ python3 script.py-arg1$1-arg2$2${@:3} } 这里,当省略长度时,假定长度足以包含所有剩余项

shift then use$@是另一种选择:

函数foo{ arg1=$1 arg2=2美元 班次2 python3 script.py-arg1$arg1-arg2$arg2$@ }
将第二个参数后的位置参数数组切片到列表的其余部分,如下所示。同时从定义中删除非标准关键字函数

foo() {  
   python3 script.py --arg1 "$1" --arg2 "$2" "${@:3:$#}"
}
还要注意,$的最后一个参数在切片列表时是可选的。如果没有相同的条件,则可以理解,结束取决于最终的位置参数


此外,如果添加更多的位置参数或参数的顺序发生更改,这种参数解析方法可能会变得棘手。对于更有效的参数解析,请考虑使用GETopts的等效Python模块。

将第二之后的位置参数数组切片到列表的其余部分,如下所示。同时从定义中删除非标准关键字函数

foo() {  
   python3 script.py --arg1 "$1" --arg2 "$2" "${@:3:$#}"
}
还要注意,$的最后一个参数在切片列表时是可选的。如果没有相同的条件,则可以理解,结束取决于最终的位置参数


此外,如果添加更多的位置参数或参数的顺序发生更改,这种参数解析方法可能会变得棘手。对于更有效的参数解析,请考虑使用GETopts的等效Python模块。

不确定,但我闻起来像“$@”是一个数组,因此您可以从第五个位置索引它。类似于${$@:5}。你可以尝试一下,不确定,但我觉得“$@”是一个数组,所以你可以从第5位对它进行索引。类似于${$@:5}。你可以试一下