test=$line i=0
while case "$test" in (*select*)
test=${test#*select};;(*) ! :;;
esac; do i=$(($i+1)); done
grep
그런 간단한 것을 요구할 필요는 없습니다 .
또는 기능으로 :
occur() while case "$1" in (*"$2"*) set -- \
"${1#*"$2"}" "$2" "${3:-0}" "$((${4:-0}+1))";;
(*) return "$((${4:-0}<${3:-1}))";;esac
do : "${_occur:+$((_occur=$4))}";done
2 개 또는 3 개의 인수가 필요합니다. 그 이상을 제공하면 결과가 왜곡됩니다. 다음과 같이 사용할 수 있습니다.
_occur=0; occur ... . 2 && echo "count: $_occur"
...의 발생 횟수 출력되는 .
하여 ...
이 적어도 2 회 발생한 경우. 이처럼 :
count: 3
경우 $_occur
중 하나 비어 있거나 unset
이 호출 될 때 그것은 전혀 쉘 변수에 영향을 미치지 것이다 return
경우 1 "$2"
에서 발생 "$1"
보다 더 적은 "$3"
시간. 또는 두 개의 인수로만 호출 return
하면 "$2"
에없는 경우에만 1이됩니다 "$1"
. 그렇지 않으면 0을 반환합니다.
따라서 가장 간단한 형태로 다음을 수행 할 수 있습니다.
occur '' . && echo yay || echo shite
... 인쇄 ...
shite
...그러나...
occur . . && echo yay || echo shite
... 인쇄 할 것이다 ...
yay
또한 약간 다르게 작성 $2
하고 (*"$2"*)
and "${1#*"$2"}"
문 에서 따옴표를 생략 할 수도 있습니다 . 그렇게 sh[io]te
하면 일치 테스트 와 같은 일치에 쉘 글롭을 사용할 수 있습니다 .
...<<<"$line"
.grep
대신 명령 이 파일을 기대하고 있습니다