그래서 나는 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를 대화형 쉘로 사용하더라도 스크립트 작성을 좋아하지 않는 이유입니다.