Bash:使用占位符迭代文件

时间:2016-05-23 16:18:51

标签: bash loops

我想删除一些包含已安装(--bind)子目录的目录。我在名为.du的脚本文件中使用以下for循环。

for dirname in $1; do                                                                                                                                         
    sudo umount $dirname/images/Spielplatz
    sudo umount $dirname/sounds/Spielplatz
    sudo rm -r $dirname
done

我用

调用脚本文件
.du Test*

删除所有以“Test”开头的目录。但它只删除了第一个。所以我必须为每个目录调用.du

我如何编写它,以便通过一次调用处理所有这些?

2 个答案:

答案 0 :(得分:1)

在UNIX上,与DOS / Windows不同,在程序启动之前,会扩展glob表达式。因此:

.du Test*

运行.du Test1 Test2 Test3之类的东西(如果那些是与glob匹配的文件)。因此,$1表示Test1,而$2表示Test2等。程序无法知道它最初是使用Test*调用的命令行;它给出的只是后扩展阵列。

要迭代此数组中的所有元素,请使用:

for dirname in "$@"; do

答案 1 :(得分:1)

这正是你所要求的 - $1是第一个参数。要遍历所有参数,请使用"$@"

for dirname in "$@"; do

您甚至可以将其保留,因为这是默认设置;

for dirname; do