bash - 遍历目录

bash - looping through directory

我在使用 bash 循环访问目录中的文件时遇到问题。我是 bash 的新手,似乎无法弄清楚我遇到的问题。

当我循环遍历我明确提到的目录中的文件时,似乎没有问题。但是,当使用变量来描述要循环访问的目录时,事情似乎并没有解决。

工作循环,查找 ~/Desktop/ 中的所有文件:

for file in ~/Desktop/*; do
    echo "$file"
done

然而,下面的似乎不起作用,只显示~/Desktop/*

DEST="~/Desktop/*"    

for file in "$DEST"; do
    echo "$file"
done

希望这里有一些我遗漏的小东西。我的主要目标是我希望能够遍历可以保存在某种配置文件中的任意位置。

提前致谢!

根据 the reference manual,波浪号扩展在引号中不起作用。 最简单的替代方法是改用 $HOME。

假设问题中的代码在波浪号扩展之外工作(如果 ~/Desktop 中的文件都具有非常简单的名称,则这是可能的),那么您可以修改代码以在没有波浪号的情况下工作:

DEST="$HOME/Desktop/*"    

for file in "$DEST"; do
    echo "$file"
done

但是,如果您这样做,很可能 运行 会遇到文件名扩展(通配)问题。您最好在所有地方都删除引号,因为不需要它们。另外,将文件名扩展延迟到实际需要时:

DEST=~/Desktop

for file in $DEST/*; do
    echo $file
done