다음 bash 표현식을 복사하는 방법:
if [[ "$foo" =~ (bar|spam) ]]; then
echo "True"
fi
알프스에서 /bin/sh
?
그대로 입력하면 오류가 발생합니다.
/bin/sh: syntax error: unexpected "(" (expecting "then")
답변1
foo
쉘 변수에 하위 문자열이 포함되어 있는지 bar
여부 를 테스트하려면 spam
표준 case ... esac
명령문을 사용하여 이를 수행할 수 있습니다.
case $foo in
*bar*|*spam*) echo True
esac
'만능' 케이스를 원할 경우 끝에 패턴이 있는 별도의 케이스를 사용하세요 *
.
case $foo in
*bar*|*spam*) echo True ;;
*) echo False
esac
사용된 패턴은 case ... esac
정규식이 아닌 쉘 와일드카드 패턴입니다. 따라서 패턴은 전체 문자열과 일치해야 하므로 *
각 하위 문자열 주위를 사용하여 양쪽에 추가 문자를 허용합니다. 문의 각 사례에는 구분된 패턴 목록과 목록의 패턴이 일치할 때 실행되는 문의 목록이 case ... esac
사용됩니다 . |
사례에 대한 설명은 다음으로 종료됩니다 ;;
(마지막 사례에서는 생략 가능). 쉘은 일치하는 패턴을 사용하여 첫 번째 경우의 코드를 실행합니다.
위의 두 번째 코드 블록을 다음과 같이 작성할 수도 있습니다.
case $foo in (*bar*|*spam*) echo True ;; (*) echo False; esac
패턴의 여는 괄호는 항상 선택 사항입니다.
답변2
Discord의 누군가가 이 문제를 해결하는 데 도움을 주었습니다.
다음 명령문을 사용하여 질문의 일부를 재현할 수 있습니다 case
.
case "$foo" in
(bar|spam) echo "True";;
esac
답변3
당신은 그것을 사용할 수 있습니다 :
#!/bin/sh
if [ "$foo" = bar ] || [ "$foo" = spam ]; then
echo "True"
fi