bash 给定数组的for循环仅占数组中两个文件中的一个文件

bash for loop for given array only accounts for one file out of two files in array

我有来自 find 命令的两个文件的数组:

[ogino@chead SIEMENS]$ DCM_FILES=($(find . -type f))

[ogino@chead SIEMENS]$ echo ${DCM_FILES[@]}
./107939/107939/DICOM/0020_20071002_104554.150005 ./100013/100013/DICOM/0002_20130723_100423.117500

然后我构建了一个 for 循环以将信息转储到文件中(通过 dcmtk 工具箱的 dcmdump):

[ogino@chead SIEMENS]$ for dcm in "${DCM_FILES[@]}"
do
  sd=$(dcmdump ${dcm} | grep "(0008,1030)"); 
done

但是,它似乎只读取一个 DICOM 文件,如我的输出所示:

[ogino@chead SIEMENS]$ echo ${sd[0]}
(0008,1030) LO [RESEARCH^THOMPSON_SCHILL] # 24, 1 Unknown Tag & Data

[ogino@chead SIEMENS]$ echo ${sd[1]}

# I get a blank line for the second instance of my echo testing

[ogino@chead SIEMENS]$ echo ${sd[@]}
(0008,1030) LO [RESEARCH^THOMPSON_SCHILL] # 24, 1 Unknown Tag & Data

我尝试在循环之前为 sd 启动一个空白数组,但没有用(sd=( )),而且令人惊讶的是,使用 dcm 进行索引似乎也没有用拿起第二个文件 ${sd[1]}...

[ogino@chead SIEMENS]$ echo ${dcm[0]}
./100013/100013/DICOM/0002_20130723_100423.117500
[ogino@chead SIEMENS]$ echo ${dcm[1]}

[ogino@chead SIEMENS]$ echo ${dcm[@]}
./100013/100013/DICOM/0002_20130723_100423.117500

删除 sd 变量的变量赋值似乎消除了错误,除了,我需要用数组将这个特定的输出存储在某个地方,这就是为什么我将 dcmdump 命令设置为sd 第一名。

[ogino@chead SIEMENS]$ for dcm in "${DCM_FILES[@]}"; do dcmdump ${dcm} | grep "(0008,1030)"; done
W: no data dictionary loaded, check environment variable: DCMDICTPATH
(0008,1030) LO [MRI BRAIN/MRHD]                         #  14, 1 Unknown Tag & Data
W: no data dictionary loaded, check environment variable: DCMDICTPATH
(0008,1030) LO [RESEARCH^THOMPSON_SCHILL]               #  24, 1 Unknown Tag & Data

谷歌搜索似乎暗示 grep 可能存在问题,但目前我还不是很清楚。

是否需要在我的循环中进行修改以确保我可以将两个实例存储到一个数组中?任何帮助我指出正确的方向以使用 grep

的第二个实例产生上面的输出

如何遍历 DCM_FILES 数组的索引而不是值,因为无论如何您都希望索引在新数组中匹配?

DCM_FILES=($(find . -type f))
for idx in $(seq ${#DCM_FILES[@]}) ; do
  sd[idx]=$(dcmdump ${DCM_FILES[idx]} | grep "(0008,1030)")
done
echo "${sd[@]}"