이 모든 예제는 에만 내장 함수를 사용하며 dash
과 완전히 호환됩니다. 당신은 실제로 당신이 case
또는 if
사용할 수있는 문자열의 하위 문자열을 찾고 있다면
찾기 하위 문자열
.
각기 다른 두 개의 match
함수를 작성하여 설명하겠습니다. 게으른 경우이 함수 중 하나를 스크립트에 잘라내어 붙여 넣을 수 있습니다.
if match -32 "$STRING"; then
echo "found '-32'!"
fi
예 : 내가 $STR
그래서 돈의 주위에 공간을 추가 위의 함수에서
function match() {
local SUBSTR="$1" STR="$2" # get args
case " $STR " in # add extra spaces
*" $SUBSTR "*) return 0 ;; # return true if match
esac
return 1 # no match: return false
}
(: 당신은 시작과 끝 모두에 $SUBSTR
검색 원했고, 공백으로 문자열의 나머지 부분에서 분리 된 경우는 다음과 같이 사용할 수 있습니다 'T는 명시 적으로 시작과 문자열의 끝에서 일치를 찾을 수 있습니다.)
function match() {
local SUBSTR=" $1 " STR=" $2 " # get args + add extra spaces
[ "${STR#*"$SUBSTR"}" != "$STR" ] \
&& return 0 # match: return true
return 1 # no match: return false
}
이 if
문은 조금 까다 롭습니다. ${STR#*"$SUBSTR"}
부분 표기는 $STR
으로 시작하여 처음부터 모두 $SUBSTR
의 첫 번째 항목까지 제거합니다 ($SUBSTR
을 찾을 수 없으면 아무것도 제거하지 마십시오). 그런 다음 원본을 $STR
과 비교하고 이 아닌 경우과 같은 부분 문자열을 찾았습니다.
, 이제 인수
찾기 당신이 실제로 인수를 찾고 있다면, 위의 기능을 사용하고 단순히 match "-32" "$*"
를 사용하지만, 모든 문자열을 찾을 것이며,에서 인수를 구별 할 수 (예를 들어 파일 이름과 같은 인수가 일 때 문자열과 일치하는 '-32'가있는 경우).
이 경우 args를 살펴 보는 것이 좋습니다. 다시 나는 당신이 argmatch "$ARG" "[email protected]"
argmatch() {
local FIND="$1" ARG; shift # get $FIND arg, remove it from [email protected]
for ARG; do # loop [email protected]
[ "$ARG" = "$FIND" ] && return 0 # found? then return true
done
return 1 # return false
}
으로 호출 할 수있는 당신을 위해 약간의 기능을 쓸 것이다 왜 인수 끝나지 않았다 당신 루프 대신 하나의 문자열로 치료합니까? – Barmar
이것이 바보 같은 질문 인 경우 죄송합니다. 어떻게해야합니까? – Mason
'for arg; if "[X $ arg"= "X-32"] ...; done' – Barmar