如何在shell脚本中使用通配符.*

2ledvvac  于 2023-03-24  发布在  Shell
关注(0)|答案(1)|浏览(201)

我想循环遍历某些目录中的文件,我尝试过

INPUT_PATH=/group/had/muon/cometmgr/MC6/MC6A01/rootracker/oa_g4_proton_00000`printf %03d ${j}`*.rootracker

其中j在循环过程中增加,但INPUT_PATH的输出只是一个包含字符*的路径,但没有被文件名替换。我哪里做错了?

zwghvu4y

zwghvu4y1#

这不起作用,因为变量赋值不经历文件名扩展(aka globbing)。根据POSIX,2.9.1简单命令:
在赋值之前,每个变量赋值都应进行扩展,以进行波浪号扩展、参数扩展、命令替换、算术扩展和引号删除。
您可以使用eval来绕过它,但是SO评论员会因为我建议使用它而把我钉在十字架上,因为除非您小心,否则它可能是一个安全风险。
再给我们展示一些你想做的事情,我们就可以提出更好的方法。在那之前,关于

INPUT_PATH=/group/had/muon/cometmgr/MC6/MC6A01/rootracker
for j in 0 1 2 3 4 5 6 7 8 9 10; do
  frob ${INPUT_PATH}/$(printf %03d $j)*.rootracker
done

应该可以。

相关问题