gpt4 book ai didi

bash - 在 Unix (bash) 中,如何将通配符附加到变量?

转载 作者:行者123 更新时间:2023-12-02 09:29:58 25 4
gpt4 key购买 nike

我的工作要求我循环遍历 BigDirectory 中的每个目录,然后遍历每个目录中的每个文件。就像这样:

for d in BigDirectory/*/
do
FILES=$d*
for f in $FILES
do
echo "File $f in directory $d"
done
done

我的问题是关于 FILES=$d*。当我在命令行中执行此命令时,它的工作方式就像它应该的那样 - 也就是说,对于单次迭代, echo $FILES 显示

BigDirectory/directory1/file1
BigDirectory/directory1/file2
BigDirectory/directory1/file3

但是当我将此脚本作为集群上的作业提交时,它不起作用 - 如果我要回显 $FILES,我会看到它一直在寻找文字文件名“BigDirectory/directory1/*”的内容- 就像它没有注册星号一样。

有人知道会发生什么吗?

编辑对我有用的是将 shopt -s nullglob 放在每个循环之前,并在开头添加一行“cd 来定义集群在哪里查找文件(因此它不会扩展 *)。感谢您的帮助全部

最佳答案

如果通配符与任何文件都不匹配,则结果将是文字字符串本身。为了防止这种情况,请设置 nullglob 选项并在 for 循环中使用通配符。

shopt -s nullglob
...
for f in "$d"*
do
...
done

关于bash - 在 Unix (bash) 中,如何将通配符附加到变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34235186/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com