嵌套for循环问题不会移动到下一个文件

时间:2013-10-10 10:03:28

标签: bash bash-completion

find_date=$(stat -c %y $files | awk '{print $1}')
#Grabbing each file from the array
for file in "${files[@]}"; do
# We get the date part
file_date=''

#Reading the date and breaking by the - mark
IFS="-" read -ra parts <<< "$file"


unset file_date
find_date=$(stat -c %y $files | awk '{print $1}')
echo "File Date: " $find_date



for t in "${find_date[@]}"; do
#Putting the date into the array
if [[ $t == [0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9] ]]; then
    file_date=$t
    break
fi
done
echo "T: " $t

所以一切正常但是for循环应该移动到下一个文件。当我运行我的脚本时,我注意到STAT命令的所有错误都不起作用,因为在它执行第一个文件之后它仍在尝试STAT该文件而不是列表中的下一个

2 个答案:

答案 0 :(得分:1)

重置file_date,使其不“记住”上一循环的结果,即:

unset file_date
for t in "${find_date[@]}"; do
   #Putting the date into the array
    if [[ $t == [0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9] ]]; then
        file_date=$t
        break
    fi
done

答案 1 :(得分:0)

这一行:

find_date=$(stat -c %y $files | awk '{print $1}')

files是数组,因此每次循环时$files都会扩展到该数组的第一个元素。您希望使用用于迭代数组的file变量。

for file in "${files[@]}"; do
    ...
    find_date=$(stat -c %y "$file" | awk '{print $1}')
    #                      ^^^^^^^
    ...
done