0

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

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

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

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

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

DEST="~/Desktop/*"    

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

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

提前致谢!

4

1 回答 1

-2

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

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

DEST="$HOME/Desktop/*"    

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

但是,如果这样做,您很可能会遇到文件名扩展(通配符)问题。您最好将引号放在任何地方,因为它们不是必需的。此外,延迟文件名扩展,直到它真正需要它:

DEST=~/Desktop

for file in $DEST/*; do
    echo $file
done
于 2016-08-23T03:17:57.843 回答