David Mathers Asked: 2018-06-03 12:16:13 +0800 CST2018-06-03 12:16:13 +0800 CST 2018-06-03 12:16:13 +0800 CST For循环在带参数的函数中不起作用 772 因此,我正在创建一个函数,该函数作为给定参数在目录中的所有文件中执行 for 循环,并打印出所有文件和目录: #!/bin/bash List () { for item in $1 do echo "$item" done } List ~/* 但是,当我运行脚本时,它只打印出目录中的第一个文件。 有任何想法吗? function for 1 个回答 Voted Best Answer jesse_b 2018-06-03T12:23:31+08:002018-06-03T12:23:31+08:00 如果您尝试遍历目录中的文件,则需要像这样对目录进行 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,我完全错过了。
如果您尝试遍历目录中的文件,则需要像这样对目录进行 glob:
然后这样称呼它:
或者,如果您想将多个文件作为参数传递,您可以
for
像这样编写循环:然后可以称为:
您当前的功能有什么问题:
当您使用 glob 调用它时,它会将目录中的每个文件作为单独的参数传递。假设您的主目录包含
file1
、file2
和file3
。当你打电话时list ~/*
,你实际上是在打电话:然后你的
for
循环只被传递位置参数 1 所以for item in ~/file1
其他位置参数未被使用。还要感谢 Ilkkachu 指出你也忘记了
/
你的 hashbang,我完全错过了。