bash中的嵌套for循环未正确迭代?

bash中的嵌套for循环未正确迭代?,bash,shell,Bash,Shell,我对脚本/编程/所有事情都是新手,似乎无法找到我试图迭代的bash脚本/循环 我有一个名为“folder”的目录,其中有许多子目录,每个子目录都包含我想要回显的文件(目前) 我有这个,但它似乎不打印子目录中的文件,而是打印子目录本身。我将如何修改脚本以使其工作 for directory in *; do for thing in $directory do echo $thing done done Bash版

我对脚本/编程/所有事情都是新手,似乎无法找到我试图迭代的bash脚本/循环

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

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

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

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

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

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

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

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

for directory in *;
do
    for thing in "$directory"/*
    do
        echo "$thing"
    done
done
您可以使用一个具有更复杂图案的循环来完成此操作:

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

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

for directory in *;
do
    for thing in "$directory"/*
    do
        echo "$thing"
    done
done
您可以使用一个具有更复杂图案的循环来完成此操作:

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

您不想要
${directory}/*
?或者perphaps
(cd“$directory”;表示*中的内容;do echo$thing;done;)
。是否要
${directory}/*
?或者perphaps
(cd“$directory”;表示*中的内容;do echo$thing;done;)
。所谓无循环,是指类似于
some_命令*/*
?我假设内部循环的主体比单个内置命令更复杂,在这种情况下,大型匹配集会出现问题。所谓无循环,是指类似于
some_command*/*
?我假设内部循环的主体比单个内置命令更复杂,在这种情况下,大型匹配集会出现问题;你可以直接在模式上迭代,这(我认为)不需要在内存中存储完全匹配;您可以直接迭代模式,我认为这不需要在内存中存储完全匹配。