如何在 unix 中的 for 循环中迭代第 n 个文件?下面是我尝试过但没有成功的一些代码
#!/bin/bash
#
n=2
array=( "CTL_MLPOSDTLP1_1.ctl" "CTL_MLPOSDTLP1_2.ctl" "CTL_MLPOSDTLP1_3.ctl" )
for x in "${array[@]}"
for ((x=${array[@]}; x<=n; x++));
do
echo "array[x]"
done
答案1
以下是循环数组的两种方法:
#!/bin/bash
array=( "CTL_MLPOSDTLP1_1.ctl" "CTL_MLPOSDTLP1_2.ctl" "CTL_MLPOSDTLP1_3.ctl" )
echo Loop 1
for x in "${array[@]}"
do
echo "$x"
done
echo Loop 2
for ((x=0; x<${#array[@]}; x++));
do
echo "${array[x]}"
done
循环选定的项目
此脚本允许您在命令行上指定要处理数组中的哪些元素:
#!/bin/bash
array=( "CTL_MLPOSDTLP1_1.ctl" "CTL_MLPOSDTLP1_2.ctl" "CTL_MLPOSDTLP1_3.ctl" )
for x in "$@"
do
echo "${array[x]}"
done
假设我们想循环前两个并跳过第三个。 (由于bash
使用从零开始的索引,前两个是数字 0 和数字 1。)使用:
$ bash script.sh 0 1
CTL_MLPOSDTLP1_1.ctl
CTL_MLPOSDTLP1_2.ctl
仅运行第三个:
$ bash s.sh 2
CTL_MLPOSDTLP1_3.ctl
迭代从0
到n-1
for ((x=0; x<n; x++));
do
echo "${array[x]}"
done
答案2
#!bin/bash
n=2
array=( "CTL_MLPOSDTLP1_1.ctl" "CTL_MLPOSDTLP1_2.ctl" "CTL_MLPOSDTLP1_3.ctl" )
for ((x=0; x<=n-1; x++));
do
echo "${array[x]}"
done
感谢@john 在我编辑并获得正确输出时提供的帮助;现在正在工作:)