对脚本参数中给出的每个第n个文件执行操作

时间:2013-02-04 22:34:06

标签: macos bash for-loop

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

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

3 个答案:

答案 0 :(得分:2)

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

selectedargs=()
n=4
for ((i=1; i<$#; i+=n)); do
    selectedargs+=("${!i}")
done

答案 1 :(得分:0)

我认为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

答案 2 :(得分:0)

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

#!/bin/bash

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

额外的shift是必要的,因为shift如果其参数大于剩余参数的数量则不执行任何操作。