1

我有一堆文件,例如:

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 等于20197695or 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

所以看起来在脚本内部,大括号扩展没有像我预期的那样工作......我能做些什么来解决这个问题?

4

1 回答 1

-1
#!/bin/bash

myJobs=( 20197695, 20261798 )
ifs_ini="$IFS"
IFS+=','
myJobs_string=( ${myJobs[*]} )
IFS="$ifs_ini"

echo myJobs ${myJobs[@]}
echo myJobs_string ${myJobs_string[@]}
echo jobReports/NARX_{${myJobs_string[@]}}*.out
grep -c 'Saving results to.*$' jobReports/NARX_{"$myJobs_string"}*.out
bash --version

输出

myJobs 20197695 20261798
myJobs_string 20197695 20261798
jobReports/NARX_{20197695 20261798}*.out
<not tested>

PS:grep -c ...是一样的echo $( echo grep ... | wc -l )

于 2018-04-08T04:30:06.750 回答