bash - 循环遍历目录

时间:2016-08-23 03:09:51

标签: bash loops quotes glob tilde-expansion

我无法使用bash循环遍历目录中的文件。我对bash很陌生,似乎无法弄清楚我遇到的问题。

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

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

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

但是,以下似乎不起作用,只显示~/Desktop/*

DEST="~/Desktop/*"    

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

希望我在这里找不到一些小东西。我的主要目标是,我希望能够遍历可以保存在某些类型的配置文件中的任意位置。

提前致谢!

1 个答案:

答案 0 :(得分:-2)

根据the reference manual,代字号扩展不适用于引号。 最简单的选择是改用$ HOME。

假设问题中的代码与代字号扩展分开(如果〜/ Desktop中的文件都有非常简单的名称,则可以这样做),那么你可以修改你的代码而不用代字号:

DEST="$HOME/Desktop/*"    

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

但是,如果这样做,很可能会遇到文件名扩展(globbing)问题。你最好随处丢弃报价,因为它们不需要。此外,延迟文件名扩展,直到实际需要:

DEST=~/Desktop

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