Bash 将Grep的输出存储在数组中

Bash 将Grep的输出存储在数组中,bash,for-loop,grep,Bash,For Loop,Grep,我有两个目录中的netCDF文件,我希望最终在其中找到一个变量并进行比较,如果不相等,我希望删除这两个文件。到目前为止,我所拥有的: dir1=(/working/test/temp1/*.nc) dir2=(/working/test/temp2/*.nc) 这里我试图将grep的输出存储到一个数组中。我在网站上找到了这些方法,但都不管用 for ((i = 0; i < ${#dir1[@]}; ++i)); do dir1_arr=($(ncdump -h "$dir1" |

我有两个目录中的netCDF文件,我希望最终在其中找到一个变量并进行比较,如果不相等,我希望删除这两个文件。到目前为止,我所拥有的:

dir1=(/working/test/temp1/*.nc)
dir2=(/working/test/temp2/*.nc)
这里我试图将grep的输出存储到一个数组中。我在网站上找到了这些方法,但都不管用

for ((i = 0; i < ${#dir1[@]}; ++i)); do
  dir1_arr=($(ncdump -h "$dir1" | grep "Temperature = "))
done

for i in $dir1; do
dir1_arr=($(ncdump -h "$i" | grep "Granules = "))
done
((i=0;i<${dir1[@]};++i));做 dir1_arr=($(ncdump-h“$dir1”| grep”Temperature=“)) 完成 对于i,单位为1美元;做 dir1_arr=($(ncdump-h“$i”| grep”Granules=“)) 完成
我不确定这是否是正确的方法,但我想比较应该存储在两个单独数组中的颗粒值,如果颗粒不匹配,则删除相应的文件。首先,我需要在数组中存储grep的输出

所有呈现的尝试都没有引用
$(…)
,这一点很重要,因为
grep
输出包含多个单词。有关解决方案,请参见此答案的结尾。此外,还有其他错误:


这不起作用,因为

  • for
    命令头中,您使用了
    $dir1
    而不是
    “${dir1[@]}”
  • 在循环体中,您使用了
    dir1\u arr=
    而不是
    dir1\u arr+=

这不起作用,因为绝对路径错误
/…


正确的版本是

dir1_arr=()
for d in working/test/temp1/*.nc
do  dir1_arr+=("$(ncdump -h $d | grep 'Granules =')")
done

当我执行
echo${dir1[@]}
时,屏幕上不会打印任何内容。您的
dir1
数组为空。您关心的目录是绝对路径还是相对路径?@EdMorton我希望数组包含该目录路径中的netCDF文件。它可能是相对路径。@anubhava yes回显确实显示所有文件是否
echo“${dir1[@]}”
work?
for i in $dir1; do
dir1_arr=($(ncdump -h "$i" | grep "Granules = "))
done
dir1_arr=(); for d in /working/test/temp1/*.nc; do dir1_arr+=($(ncdump -h "$d" | grep "Temperature = ")); done
dir1_arr=()
for d in working/test/temp1/*.nc
do  dir1_arr+=("$(ncdump -h $d | grep 'Granules =')")
done