변수를 대문자와 소문자로 비교

변수를 대문자와 소문자로 비교

그래서 나는 tcsh 스크립트에서 사용자의 응답을 확인하고 싶고 이것이 내가 지금까지 가지고 있는 것입니다.

set var1="temp"
    while($var1 != [yY] && $var1 != [Yy][Ee][Ss] && $var1 != [Nn] && $var1 != [Nn][Oo])
            echo "Do you want to create a backup directory ? :"
        set response=&< 
        if ($response == [yY] || $respose == [Yy][Ee][Ss]) then
            mkdir backup
            echo "Backupd directory created \n"
        else if($response == [nN] || $response == [Nn][Oo]) then
            echo "No backup directory is created \n"
        else
            echo "Please enter a valid respose ! \n"
            var1=$response
        endif 
    end

기본적으로 사용자가 Y, y, Yes, N, n, No를 입력하기를 원하지만 물론 yes 및 now에서는 소문자와 대문자의 조합도 허용합니다.

하지만 스크립트를 실행하면 오류가 발생합니다.[yY]: No match.

그래서 $var1을 [Yy]와 비교할 때 문제가 발생한다고 추측합니다. 기본적으로 사용자 입력의 유효성을 검사하고 있습니다.

그리고 var1저처럼 재할당하지 var1=$response않으면 set을 다시 사용해야 합니다. >

답변1

!~아마도 "같지 않음"이 아니라 "정규 표현식과 일치하지 않음 " 을 의미했을 것입니다 !=.

$var =~ regexp및 의 경우 $var !~ regexp오른쪽 패턴을 참조하면 안 됩니다. ==및 의 경우 !=오른쪽 부분을 인용할 수 있습니다(사실 저는 이것을 권장합니다).

!=문자열이 예상되므로 " 는 정규식 [yY]으로 구문 분석되지 않습니다. 대신 쉘은 " y또는 Y" 라는 이름의 파일로 확장합니다. 파일이 없기 때문에 쉘이 불평합니다.

그건 그렇고, 이것이 내가 tcsh를 대화형 쉘로 사용하더라도 스크립트 작성을 좋아하지 않는 이유입니다.

관련 정보