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

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

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

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

예를 들어, 무시하려면 어떻게 해야 합니까 '??,.

그래서 기본적으로 Whats going on, What's going on, What'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을 제공하는 기타 시스템에서 작동해야 합니다.

관련 정보