입력 매개변수에 특정 하위 문자열이 포함되어 있는지 감지하고 싶습니다.
다음 스크립트를 시도했습니다.
#1:
#!/bin/sh
if [ $1 = *abc* ]
then
echo contains abc
else
echo not contains abc
fi
#2:
if [ "$1" = "*abc*" ]
then
echo contains abc
else
echo not contains abc
fi
#삼:
if [ "$1" = *"abc"* ]
then
echo contains abc
else
echo not contains abc
fi
#1~#3 모두 작동하지 않습니다.
그러나 다음은 [[
쉽게 작동할 수 있습니다.
#4:
if [[ $1 = *"abc"* ]]
then
echo contains abc
else
echo not contains abc
fi
#5:
if [[ $1 = *abc* ]]
then
echo contains abc
else
echo not contains abc
fi
그럼 싱글도 제작 가능할까요 [
?
1 - 2021년 9월 21일 오전 10:55 추가됨
방금 매우 유용한 스레드를 찾았습니다.
답변1
[[
예내장 쉘. 이는 [
실행 파일인 보다 일반적인 버전입니다 /usr/bin
(참조:문서 및 man
페이지test
상세 사항은).
[
휴대성이 뛰어나고 [[
다재다능한 것이 일반적으로 사용해야 하는 변형입니다.
if [[ $1 == *"abc"* ]]; then
echo "substring present"
else
echo "substring not present"
fi
하위 문자열을 테스트하는 또 다른 좋은 방법은 정규식 연산자를 사용하는 것입니다.
if [[ "$1" =~ .*"abc".* ]]; then
echo "contains"
else
echo "doesn't contain"
fi
다음 표현식 =~
은정규식와일드카드 뿐만이 아닙니다.
부분 문자열을 확인하는 또 다른 방법은 다음을 사용하는 것입니다 case
.
case $1 in
*"abs"*)
echo "substring present"
;;
*)
echo "substring not present"
;;
esac
grep
또는 CPH가 그의 게시물에서 설명하는 대로 를 사용할 수 있습니다 . 하지만 꼭 사용하셔야 합니다여기 - 문서:
if grep -q "abc" <<< "$STR"; then
echo "substring present"
else
echo "substring not present"
fi
답변2
단일 대괄호를 사용하려는 이유가 있나요?
더 간단한 방법은 다음과 같습니다.
if echo "$1" | grep 'abc' > /dev/null; then
# Do if true substring found
else
# substring not found
fi
이 명령에 익숙하지 않은 경우에는 grep
사용자가 제공한 인수/값에 대한 문자열을 검색합니다. 해당 플래그를 사용하려면 대소문자를 무시할 수 -i
있으며 위의 경우 매개변수 "$1"에서 소문자 "abc"를 구체적으로 찾습니다.