2

我正在尝试为我的 bash 脚本获取输入参数。testbash.sh 4 1 2 4 5 Science ap * 我想将这些参数作为一个数组获取,我使用 $@ 将所有参数获取到一个数组中。现在基于第一个参数,我需要对其余参数进行子集化。这里第一个数字是 4,所以从第二个参数到第五个参数应该保存为一个数组,如 [1 2 4 5] 和另一个数组中的其余参数。

我试过这个

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

我尝试这样做以获取第一部分,但是当我运行此“testbash.sh 4 1 2 4 5 Science ap *”时,表达式中出现错误语法错误(错误标记为“:-4”)

4

1 回答 1

4

这是一种方法:

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

这直接从参数起作用,而不是使用中间数组。以或多或少相同的方式使用中间数组会很容易,但请记住数组索引从 0 开始,而参数索引实际上从 1 开始(因为参数 0 是命令名称)。

请注意,引号很重要:没有它们,命令行参数将通过 glob 扩展和分词传递额外的时间;实际上,您失去了引用命令行参数的能力。

于 2013-06-20T17:03:59.747 回答