변수를 비교할 때 특정 문자를 무시하시겠습니까?

변수를 비교할 때 특정 문자를 무시하시겠습니까?

예를 들어 이것이 내 스크립트인 경우:

if [[ $yesno == "What's going on" ]]; then

'그렇다면 예를 들어 Ignore , ?,를 어떻게 만들 수 있습니까 .?

따라서 기본적으로 Whats going on, What's going onWhat's going on?모두 What's going on.동일한 것으로 보입니다. 여러 변수를 일치 시킬 수 있다는 것을 알고 있지만 || [[ $yesno == ".. ]]모든 단일 조합을 입력할 수는 없습니다.

답변1

특정 예제만 작동하도록 하려면 bash 정규식 일치를 사용할 수 있습니다.

[[ $yesno =~ What\'?s\ going\ on[.?]? ]]

백슬래시로 따옴표와 공백을 이스케이프 처리합니다.

답변2

비교하기 전에 변수에서 영숫자 문자 옆의 모든 문자를 간단히 제거할 수 있습니다.

$ yesno="What's going on?"
$ if [[ ${yesno//[^a-zA-Z0-9\ ]/} == "Whats going on" ]]; then echo "OK";fi
OK

답변3

이를 수행하는 가장 일반적이고 보편적인 방법 중 하나는 문자열을 파이프로 연결하여 의 반환 코드를 grep확인하는 것입니다 . grepif문은 모든 명령이나 파이프라인의 종료 코드를 확인할 수 있습니다.

if echo "$yesno" | grep -q "What'*s *going *on[?.]*"; then

언급한 문자 외에도 단어 사이에 0개 이상의 공백이 허용됩니다.

이 구성은 OS X, FreeBSD, GNU/Linux 및 POSIX grep을 제공하는 기타 시스템에서 작동해야 합니다.

관련 정보