Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 对脚本参数中给定的每个第n个文件执行操作_Macos_Bash_For Loop - Fatal编程技术网

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

Macos 对脚本参数中给定的每个第n个文件执行操作,macos,bash,for-loop,Macos,Bash,For Loop,我想启动一个bash脚本,使用一些文件作为参数。然后,我需要将该列表的第n个文件添加到一个数组中 它曾考虑使用for循环,但似乎它只能同时执行这两件事情中的一件。当然,我希望生成的代码尽可能简单和小,但唯一的先决条件是必须在bash中完成,并且只能使用系统附带的工具。我认为for循环非常合适。这里,对于n=9,我创建了一个包含数字0到99的数组,然后使用for循环创建了一个包含原始数组中每9位数字的数组: x=( {0..99} ) y=() n=9 for ((i=0; i<${#x[@

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


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

我认为
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
x=({0..99})
y=()
n=9

对于((i=0;i由于文件名是参数,您可以使用
shift
放弃不需要的参数:

#!/bin/bash

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

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

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

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

对于((i=1;i您是在循环之前创建一个数组并对该数组执行操作。我想添加到以空数组开头的数组中,但我不知道它将有多少字段。我需要运行
my_script file1 file2 file2
,并让它对它们执行操作(可能使用
$@
)然后每N次执行一次。@user137369什么阻止了你?你可以用
“$@”
代替
“${x[@]}”
在我的循环中,它仍然会作用于它的每一个
第n个
。被选为新的最佳答案,因为for循环看起来更干净,更容易维护。然而,我有一个问题。它是有效的,我可以理解它的大部分,除了
在这种情况下到底做了什么?@user137369:
告诉bash来执行——本质上,它用它的值替换变量名,然后将其视为另一个变量名并用它的值替换。因此,例如,当i=12时,它将
“${!i}”
转换为
“${12}”
,然后转换为脚本的第12个参数。