For 循环不适用于带参数的函数

For 循环不适用于带参数的函数

因此,我正在创建一个函数,该函数作为给定参数在目录中的所有文件中执行 for 循环,并打印出所有文件和目录:

#!/bin/bash

List () {
    for item in $1
            do
            echo "$item"
            done
}

List ~/*

但是,当我运行脚本时,它只打印出目录中的第一个文件。

有任何想法吗?

答案1

如果您尝试迭代目录中的文件,则需要像这样 glob 该目录:

#!/bin/bash

List () {
    for item in "${1}/"*
            do
            echo "$item"
    done
}

然后这样称呼它:

$ list ~

或者,如果您想传递多个文件作为参数,您可以for像这样编写循环:

List () {
    for item
            do
            echo "$item"
    done
}

然后可以将其称为:

$ list ~/*

您当前的功能有什么问题:

当您使用 glob 调用它时,它会将目录中的每个文件作为单独的参数传递。假设您的主目录包含file1file2file3。当您调用 时list ~/*,您实际上是在调用:

list ~/file1 ~/file2 ~/file3

那么您的for循环仅传递位置参数 1,因此for item in ~/file1其他位置参数未使用。

还要感谢 Ilkkachu 指出你也忘记了/你的 hashbang 中的 a,我完全错过了。

相关内容