0

我有一个要启动的 bash 脚本,它使用一些文件作为参数。然后我需要将该列表的每个第 n 个文件添加到一个数组中。

它考虑过使用for循环,但似乎它一次只能做这两件事中的一件。当然,我希望生成的代码尽可能简单和小,但唯一的先决条件是它必须在 bash 中完成,并且只能使用系统附带的工具。

4

3 回答 3

2

您可以使用间接变量引用以数字方式引用参数:

selectedargs=()
n=4
for ((i=1; i<$#; i+=n)); do
    selectedargs+=("${!i}")
done
于 2013-02-05T06:42:29.063 回答
0

我认为for循环非常合适。在这里, for n=9,我创建一个包含数字 0 到 99 的数组,然后使用 for 循环创建一个包含原始数组的每个第 9 个数字的数组:

x=( {0..99} )
y=()
n=9
for ((i=0; i<${#x[@]}; i=i+n)); do
    y+=( "${x[i]}" )
done
于 2013-02-04T22:41:23.570 回答
0

由于文件名是参数,您可以使用shift丢弃不需要的参数:

#!/bin/bash

files=()
n=8
while (( $# > 0 )); done
   files+=( $1 )
   shift $n || shift $#
done

额外的shift是必要的,因为shift如果它的参数大于剩余参数的数量,则什么都不做。

于 2013-02-04T22:59:09.630 回答