stringContain
변형 (호환 또는 대소 문자 구분)
이 스택 오버플로 답변이 대부분 Bash 에 대해 알려주 듯이이 게시물 맨 아래에 사례 독립적 Bash 함수를 게시했습니다 ...
어쨌든 내
호환되는 답변
Bash 전용 기능을 사용하는 답변이 이미 많으 므로 BusyBox 와 같이 기능이 불량한 쉘에서 작동하는 방법이 있습니다 .
[ -z "${string##*$reqsubstr*}" ]
실제로 이것은 다음을 제공 할 수 있습니다.
string='echo "My string"'
for reqsubstr in 'o "M' 'alt' 'str';do
if [ -z "${string##*$reqsubstr*}" ] ;then
echo "String '$string' contain substring: '$reqsubstr'."
else
echo "String '$string' don't contain substring: '$reqsubstr'."
fi
done
이것은 Bash, Dash , KornShell ( ksh
) 및 ash (BusyBox)에서 테스트되었으며 결과는 항상 다음과 같습니다.
String 'echo "My string"' contain substring: 'o "M'.
String 'echo "My string"' don't contain substring: 'alt'.
String 'echo "My string"' contain substring: 'str'.
하나의 기능으로
@EeroAaltonen의 요청에 따라 동일한 쉘에서 테스트 한 동일한 데모 버전이 있습니다.
myfunc() {
reqsubstr="$1"
shift
string="$@"
if [ -z "${string##*$reqsubstr*}" ] ;then
echo "String '$string' contain substring: '$reqsubstr'.";
else
echo "String '$string' don't contain substring: '$reqsubstr'."
fi
}
그때:
$ myfunc 'o "M' 'echo "My String"'
String 'echo "My String"' contain substring 'o "M'.
$ myfunc 'alt' 'echo "My String"'
String 'echo "My String"' don't contain substring 'alt'.
참고 : 따옴표 및 / 또는 큰 따옴표를 이스케이프하거나 큰 따옴표로 묶어야합니다.
$ myfunc 'o "M' echo "My String"
String 'echo My String' don't contain substring: 'o "M'.
$ myfunc 'o "M' echo \"My String\"
String 'echo "My String"' contain substring: 'o "M'.
간단한 기능
이것은 BusyBox, Dash 및 Bash에서 테스트되었습니다.
stringContain() { [ -z "${2##*$1*}" ]; }
그런 다음 :
$ if stringContain 'o "M3' 'echo "My String"';then echo yes;else echo no;fi
no
$ if stringContain 'o "M' 'echo "My String"';then echo yes;else echo no;fi
yes
... 또는 @Sjlver가 지적한 것처럼 제출 된 문자열이 비어 있으면 함수는 다음과 같습니다.
stringContain() { [ -z "${2##*$1*}" ] && [ -z "$1" -o -n "$2" ]; }
또는 Adrian Günter의 의견 에서 제안한대로 -o
스위치를 피하십시오 .
stringContain() { [ -z "${2##*$1*}" ] && { [ -z "$1" ] || [ -n "$2" ];};}
최종 (간단한) 기능 :
그리고 테스트를 뒤집어 잠재적으로 더 빨리 만들 수 있습니다.
stringContain() { [ -z "$1" ] || { [ -z "${2##*$1*}" ] && [ -n "$2" ];};}
빈 문자열로 :
$ if stringContain '' ''; then echo yes; else echo no; fi
yes
$ if stringContain 'o "M' ''; then echo yes; else echo no; fi
no
대소 문자 구분 (Bash 만 해당)
대소 문자를 구분하지 않고 문자열을 테스트하려면 각 문자열을 소문자로 변환하십시오.
stringContain() {
local _lc=${2,,}
[ -z "$1" ] || { [ -z "${_lc##*${1,,}*}" ] && [ -n "$2" ] ;} ;}
검사:
stringContain 'o "M3' 'echo "my string"' && echo yes || echo no
no
stringContain 'o "My' 'echo "my string"' && echo yes || echo no
yes
if stringContain '' ''; then echo yes; else echo no; fi
yes
if stringContain 'o "M' ''; then echo yes; else echo no; fi
no