将命令行参数绑定到数组中,并根据参数值将该数组设置为子集 [英] bash command line arguments into an array and subset the array based on the parameter value

查看:0
本文介绍了将命令行参数绑定到数组中,并根据参数值将该数组设置为子集的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试获取bash脚本的输入参数。 Testbash.sh 4 1 2 4 5科学a p* 我希望将这些参数作为数组获取,我使用$@将所有参数获取到一个数组中。现在,基于第一个参数,我需要将其余参数子集。这里第一个数字是4,因此从第二个参数到第五个参数应该保存为类似[1 2 4 5]的数组,其余参数保存在另一个数组中。

我试过

array=( $@ ) len=${#array[@]} args=${array[@]:0:$len-${array[1]}} echo $args

我尝试这样做是为了获取第一部分,但是当我运行这个"testbash.sh 4 1 2 4 5 Science a p*"时,我在表达式中遇到了错误语法错误(错误标记为":-4")

推荐答案

这里有一种方法:

FIRST_SET=("${@:2:$1}")
REST=("${@:$(($1+2))}")

它直接从参数工作,而不是使用中间数组。使用中间数组会很容易,方法大致相同,但请记住,数组索引从0开始,而参数索引实际上从1开始(因为参数0是命令名)。

请注意,引号很重要:如果没有引号,命令行参数将通过全局展开和分词传递一段额外的时间;实际上,您将失去引用命令行参数的能力。

这篇关于将命令行参数绑定到数组中,并根据参数值将该数组设置为子集的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆