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

에 대한 후속 질문입니다.도커 내부의 쉘 스크립트".별도의 질문으로 올려주셔서 감사합니다!

배열 생성은 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

관련 정보