Linux 具有三个到无穷多个参数的bash函数
让我们假设我有一些python argparse脚本,我想使用bash函数将其命名为别名 假设此python脚本包含四个参数: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 但是,
--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}。你可以试一下