정의되지 않은 변수

정의되지 않은 변수

이 스크립트를 사용하려고 합니다.

#!/bin/csh
foreach SUB (1 2 3 4 5 6 7 8 9 10 11 12 13 14)
    echo $SUB
    foreach VISIT (1 2 3 4 5 6 7 8)
        echo $VISIT
        grep 'StudyDate' -f  /home/colourlab/Desktop/DrummingDTI/D${SUB}/D${SUB}V${VIS}/scout/001/infodump.dat
    done
done

하지만 다음과 같은 오류 메시지가 나타날 때마다:

1
1
SUB: Undefined variable.

이유는 모르겠습니다.

답변1

와는 별개로스크립트를 작성하면 안되는 모든 이유csh, 스크립트에서 bash 구문과 csh 구문을 혼합하고 있습니다.

로 루프를 시작 csh foreach하고 로 루프를 끝내려고 합니다 bash done. a의 루프 종료는 csh foreachis end, is not 입니다 done. 또한 grep 문에서 VISIT호출되는 변수가 있습니다.$VIS

따라서 스크립트는 csh에서 구문적으로 정확합니다.

#!/bin/csh
foreach SUB (1 2 3 4 5 6 7 8 9 10 11 12 13 14)
    echo $SUB
    foreach VISIT (1 2 3 4 5 6 7 8)
        echo $VISIT
        grep 'StudyDate' -f  /home/colourlab/Desktop/DrummingDTI/D${SUB}/D${SUB}V${VISIT}/scout/001/infodump.dat
    end
end

또는 bash에서:

#!/bin/bash
for SUB in 1 2 3 4 5 6 7 8 9 10 11 12 13 14; do
    echo $SUB
    for VISIT in 1 2 3 4 5 6 7 8; do
        echo $VISIT
        grep 'StudyDate' -f  /home/colourlab/Desktop/DrummingDTI/D${SUB}/D${SUB}V${VISIT}/scout/001/infodump.dat
    done
done

2017/04/03 수정

다음은 파일에 대한 테스트를 추가하는 bash 스크립트 버전입니다.

#!/bin/bash

idf_pfx="/home/colourlab/Desktop/DrummingDTI"
idf_sfx="scout/001/infodump.dat"

for SUB in 1 2 3 4 5 6 7 8 9 10 11 12 13 14; do
    echo $SUB
    for VISIT in 1 2 3 4 5 6 7 8; do
        echo $VISIT
        idfile="${idf_pfx}/D${SUB}/D${SUB}V${VISIT}/${idf_sfx}"
        if [ -f "${idfile}" ]; then
            grep 'StudyDate' $idfile
        else
            echo "No studydate file: $idfile"
        fi
    done
done

답변2

오류 메시지가 표시된 코드와 일치하지 않습니다. $SUB는 잘 정의된 변수이며 csh는 이를 복사하지 않습니다. 대신 csh는 "Complete: command notfound" 오류를 발생시킵니다. 복사하여 붙여넣은 메시지가 맞습니까?

관련 정보