여러 문자열의 단어 일치

여러 문자열의 단어 일치

아래 코드는 정상적으로 작동합니다.

#!/bin/bash
str='fail'
var1='pass'
var2='ok'
var3='fail'
var4='pass'

case $str in
   $var1|$var2|$var3|$var4)
   echo yes
   ;;
   *) echo no
   ;;
esac

이렇게 하면 예상대로 출력이 나옵니다 yes.

위 코드에서는 변수의 값이 하드코딩되어 있지 않고, 이전 실행에서 나온 값이므로 계속해서 변경됩니다. 문제는 가끔 이런 일이 발생한다는 것입니다.

var3='partial|fail'

모든 변수 값은 이 방법으로 변경할 수 있습니다. 따라서 이 경우에는 no이 경우를 처리하고 실패한 단어를 일치시키고 결과를 표시하려면 코드에서 어떤 변경을 해야 합니까 yes?

답변1

case다음을 수행하십시오스테르,

case $var1$var2$var3$var4 in
   *$str*) 
          echo yes 
   ;;
   *) 
          echo no 
   ;;
esac

답변2

       case $var1 in *"$str"* ) echo yes ;;
   * ) case $var2 in *"$str"* ) echo yes ;;
   * ) case $var3 in *"$str"* ) echo yes ;;
   * ) case $var4 in *"$str"* ) echo yes ;;
   * ) echo no ;; esac;; esac;; esac;; esac

귀하의 접근 방식에 따라 우리는 에 의지해야 합니다 eval.

또 다른 방법:

unset -v f
A=( "$var1" "$var2" "$var3" "$var4" )
for var in "${A[@]}"; do case $var in *"$str"* ) f=; echo yes; break;; esac; done
${f+:} echo no

답변3

#!/bin/bash
str="fail";
echo ${str} |awk -v var1="pass" \
-v var2="ok" \
-v var3="partial|fail" \
-v var4="pass" \
'{ if (( $0 ~ var1 ) || ( $0 ~ var2 ) || ( $0 ~ var3 ) || ( $0 ~ var4 )) {
  print "yes";
} else {
  print "no";
}}'

필요한 경우 위에 참조된 var 할당을 즉시 값으로 바꿀 수 있습니다. 요구 사항을 이해하면 "str"이 변수 중 하나의 일부와 일치할 때마다 "yes"가 출력됩니까?

관련 정보