test=$line i=0
while case "$test" in (*select*)
test=${test#*select};;(*) ! :;;
esac; do i=$(($i+1)); done
Vous n'avez pas besoin d'appeler grep
pour une chose aussi simple.
Ou en fonction:
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
Il faut 2 ou 3 arguments. Fournir plus que cela faussera ses résultats. Vous pouvez l'utiliser comme:
_occur=0; occur ... . 2 && echo "count: $_occur"
... qui affiche le nombre d'occurrences .
dans ...
s'il se produit au moins 2 fois. Comme ça:
count: 3
Si $_occur
est vide ou unset
lorsqu'il est appelé, cela n'affectera aucune variable shell et return
1 si "$2"
survient "$1"
moins de "$3"
fois. Ou, si elle est appelée avec seulement deux arguments, elle ne sera return
1 que si elle "$2"
n’est pas insérée "$1"
. Sinon, il retourne 0.
Et ainsi, dans sa forme la plus simple, vous pouvez faire:
occur '' . && echo yay || echo shite
... qui imprime ...
shite
...mais...
occur . . && echo yay || echo shite
... imprimera ...
yay
Vous pouvez également l'écrire un peu différemment et omettre les guillemets $2
dans l' instruction (*"$2"*)
and "${1#*"$2"}"
. Si vous faites cela, vous pouvez utiliser des globes de shell pour les correspondances comme sh[io]te
pour le test de correspondance.
...<<<"$line"
. La commandegrep
attend un fichier à la place