在bash中嵌套for循环不能正确迭代?

时间:2016-08-10 13:50:40

标签: bash shell

我是脚本/编程/一切的新手,似乎无法弄清楚我试图迭代的这个bash脚本/循环。

我有一个名为“folder”的目录,其中有许多子目录,每个子目录都包含我想要回显的文件(现在)

我有这个,但它似乎不打印子目录中的文件,而是打印子目录本身。我如何改变脚本以使其工作?

for directory in *;
do
        for thing in $directory 
        do
                echo $thing
        done
done

2 个答案:

答案 0 :(得分:3)

for循环本身并不遍历文件系统;它只迭代一串字符串。您需要迭代第二个循环的路径名扩展结果。

for directory in *;
do
    for thing in "$directory"/*
    do
        echo "$thing"
    done
done

您可以使用一个具有更复杂模式的循环来执行此操作:

for thing in */*; do
    echo "$thing"
done

答案 1 :(得分:1)

Bash 4.0版添加了一个名为globstar的新globbing选项,它在设置时以不同方式处理模式**

#!/bin/bash
shopt -s globstar
for file in folder/** # with '**'  bash recurses all the directories
do
  echo "$file"
done