我想循环遍历某些目录中的文件,我尝试过
INPUT_PATH=/group/had/muon/cometmgr/MC6/MC6A01/rootracker/oa_g4_proton_00000`printf %03d ${j}`*.rootracker
其中j在循环过程中增加,但INPUT_PATH的输出只是一个包含字符*的路径,但没有被文件名替换。我哪里做错了?
INPUT_PATH
*
zwghvu4y1#
这不起作用,因为变量赋值不经历文件名扩展(aka globbing)。根据POSIX,2.9.1简单命令:在赋值之前,每个变量赋值都应进行扩展,以进行波浪号扩展、参数扩展、命令替换、算术扩展和引号删除。您可以使用eval来绕过它,但是SO评论员会因为我建议使用它而把我钉在十字架上,因为除非您小心,否则它可能是一个安全风险。再给我们展示一些你想做的事情,我们就可以提出更好的方法。在那之前,关于
eval
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
应该可以。
1条答案
按热度按时间zwghvu4y1#
这不起作用,因为变量赋值不经历文件名扩展(aka globbing)。根据POSIX,2.9.1简单命令:
在赋值之前,每个变量赋值都应进行扩展,以进行波浪号扩展、参数扩展、命令替换、算术扩展和引号删除。
您可以使用
eval
来绕过它,但是SO评论员会因为我建议使用它而把我钉在十字架上,因为除非您小心,否则它可能是一个安全风险。再给我们展示一些你想做的事情,我们就可以提出更好的方法。在那之前,关于
应该可以。