我有一个要启动的 bash 脚本,它使用一些文件作为参数。然后我需要将该列表的每个第 n 个文件添加到一个数组中。
它考虑过使用for
循环,但似乎它一次只能做这两件事中的一件。当然,我希望生成的代码尽可能简单和小,但唯一的先决条件是它必须在 bash 中完成,并且只能使用系统附带的工具。
您可以使用间接变量引用以数字方式引用参数:
selectedargs=()
n=4
for ((i=1; i<$#; i+=n)); do
selectedargs+=("${!i}")
done
我认为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
由于文件名是参数,您可以使用shift
丢弃不需要的参数:
#!/bin/bash
files=()
n=8
while (( $# > 0 )); done
files+=( $1 )
shift $n || shift $#
done
额外的shift
是必要的,因为shift
如果它的参数大于剩余参数的数量,则什么都不做。