![如何将文件名作为变量传递给可执行程序?](https://linux22.com/image/122786/%E5%A6%82%E4%BD%95%E5%B0%86%E6%96%87%E4%BB%B6%E5%90%8D%E4%BD%9C%E4%B8%BA%E5%8F%98%E9%87%8F%E4%BC%A0%E9%80%92%E7%BB%99%E5%8F%AF%E6%89%A7%E8%A1%8C%E7%A8%8B%E5%BA%8F%EF%BC%9F.png)
这应该是一个比较简单的问题。我试图在循环中通过可执行程序传递多个文件。我尝试了多种策略(存储在数组中等),但文件名似乎没有被识别为变量。我收到的错误是:没有这样的文件或目录。
我最近尝试的概述:
FILES=path/*/*
for f in $FILES
do
./function -input $f
done
我正在 bash shell 中工作。
答案1
建议使用适当的数组并启用 shell 通配选项globstar
来填充所有子目录中的文件,而不是使用普通变量来存储通配符扩展序列
shopt -s globstar nullglob
file_list=(path/**/*)
并使用数组循环来处理每个文件
for file in "${file_list[@]}"; do
printf '%s\n' "$file"
# Your other actions on file goes here
done