【发布时间】:2018-04-08 03:19:29
【问题描述】:
我有一堆文件,例如:
jobReports/NARX_20191212_1.out
jobReports/NARX_20191212_10.out
jobReports/NARX_20197695_2.out
jobReports/NARX_20197695_3.out
jobReports/NARX_20261798_1.out
其中第一个数字序列表示jobID,第二个数字序列表示arrayID。
我想对该目录中的所有.out 文件执行搜索,其中jobID 等于20197695 或20261798。
在命令行中,这是有效的:
grep "Saving results to" jobReports/NARX_{20197695,20261798}*.out | wc -l
,它为我提供了该字符串在所需文件中的出现次数。在我的脚本中,我有以下内容:
#!/bin/bash
myJobs = ( 20197695, 20261798 )
IFS=, eval 'myJobs_string="${myJobs[*]}"'
echo $(grep "Saving results to" jobReports/NARX_{$myJobs_string}*.out |wc -l)
运行时出现错误:
grep: jobReports/NARX_{: No such file or directory
grep: 20197695: No such file or directory
grep: }*.out: No such file or directory
所以看起来在脚本内部,大括号扩展没有像我预期的那样工作......我可以做些什么来解决这个问题?
【问题讨论】:
-
为什么要评估?为什么不
jobReports/NARX_{${myJobs[@]}}*.out -
为什么 myJobs 是一个数组而不是一个简单的变量“{20197695, 20261798}”
-
您不能在大括号内使用变量进行大括号扩展。当您这样做时,
','将失去所有意义,而只是字符串的一部分。只需遍历您的数组并为每个数组成员保留sum的行,从而产生您的grep ... | wc -l。 -
@kyodev 好点,我没想到。但它(你发布的解决方案)仍然给我同样的问题
-
@DavidC.Rankin 那么有没有办法像我想要的那样使用 grep 的数组进行大括号扩展?
标签: bash grep command-substitution brace-expansion