因此,我正在创建一个函数,该函数作为给定参数在目录中的所有文件中执行 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 调用它时,它会将目录中的每个文件作为单独的参数传递。假设您的主目录包含file1
、file2
和file3
。当您调用 时list ~/*
,您实际上是在调用:
list ~/file1 ~/file2 ~/file3
那么您的for
循环仅传递位置参数 1,因此for item in ~/file1
其他位置参数未使用。
还要感谢 Ilkkachu 指出你也忘记了/
你的 hashbang 中的 a,我完全错过了。