Docker内の2つのbash配列の比較

Docker内の2つのbash配列の比較

2番目の配列の要素を除いて、新しい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

に関するフォローアップの質問です。ドッカー内のシェルスクリプト「。別の質問でお寄せいただきありがとうございます!

配列の作成は、all_idsディレクトリ名からIDを解析するよりも少し複雑である必要があるため、ここでできることは、ディレクトリのファイル名と各IDを解決するループを使用することです/output/fmriprep。そのIDの出力ファイルが見つからない場合それからall_idsそのIDがリストに追加されます。

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

関連情報