比较 docker 内的两个 bash 数组

比较 docker 内的两个 bash 数组

我需要两个创建一个新的 bash 数组,不包括第二个数组中的元素。然后在 while 循环中使用这个数组:

while [ -n "${ids_toproc[0]}" ] ; do

这是一个实现的代码:

all_ids=( /input/sub-* )
all_ids=( "${all_ids[@]#/input/sub-}" )
all_ids=( "${all_ids[@]%/}" )

exist_ids=( /output/fmriprep/sub-*.html )
exist_ids=( "${exist_ids[@]#/output/fmriprep/sub-}" )
exist_ids=( "${exist_ids[@]%/}" )
exist_ids=( "${exist_ids[@]%%.*}" ) # delete extention

ids_toproc=( `echo ${all_ids[@]} ${exist_ids[@]} | tr ' ' '\n' | sort | uniq -u` )

代码没问题吗?这是正确的比较方法吗?

答案1

这是“的后续问题”docker内的shell脚本“。感谢您将其作为单独的问题发布!

由于数组的创建all_ids需要比仅从目录名称中解析出 ID 稍微复杂一些,所以我可能会在这里做的是使用一个循环,在该循环中根据目录的文件名检查每个 ID /output/fmriprep。如果没有找到给定 ID 的输出文件,然后该 ID 将添加到all_ids列表中。

all_ids=()
for dirname in /input/sub-*/; do
    id=${dirname#/input/sub-}    # remove "/input/sub-"
    id=${id%/}                   # remove trailing "/"

    if [ ! -e "/output/fmriprep/sub-$id.html" ]; then
        # no output file corresponding to this ID found,
        # add it to he list
        all_ids+=( "$id" )
    fi
done

相关内容