将部分命令行参数存储到用户数组中

将部分命令行参数存储到用户数组中

我有能力做到这一点,

array=(2 46 7 4 2 1 1 1 23 4 5)
store=(${array[*]:5:5})
echo ${store[@]}  # print 1 1 1 23 4 5

现在,我不需要从用户数组中提取位置 5 的 5 个元素,而是需要提取命令行参数从 5以及以后。我尝试了类似的方法,但输出为空

store=(${$[*]:5:5})  # <----------------- Something to be changed here?
echo ${store[@]}  # EMPTY OUTPUT

任何帮助,如何从位置存储 n 个参数在数组中继续?

答案1

bash( 以及zsh和中ksh93,一般形式为参数扩展或者Substring Expansion是:

${parameter:offset:length}

如果length省略,您将获得从 到offset参数末尾。

在你的情况下:

array=(2 46 7 4 2 1 1 1 23 4 5)
store=( "${array[@]:5}" )
printf '%s\n' "${store[@]}"

将从6th元素到最后一个元素生成。

$@

printf '%s\n' "${@:5}"

将生成从$5到位置参数的末尾。

另请注意,您需要引用数组变量以防止split+glob对其元素进行运算符。


通过zsh,您可以使用另一种语法:

print -rl -- $argv[5,-1]

相关内容