The expr(1) tool exits with status 1 if its output is zero. The `:'
operator evaluates to the substring matched by the outermost parentheses
in the pattern, if there are any. Therefore, matching `0' against the
`R_NUMERIC' pattern always appears to fail. Fix this and similar problems
by adding extra parens around the entire pattern, including the leading
sentinel `Q'.
validp=t
case "$thing" in
- *"$nl"*) validp=nil ;;
- *) if ! expr >/dev/null "Q$thing" : "Q$ckpat\$"; then validp=nil; fi ;;
+ *"$nl"*)
+ validp=nil
+ ;;
+ *)
+ if ! expr >/dev/null "Q$thing" : "\(Q$ckpat\)\$"; then
+ validp=nil
+ fi
+ ;;
esac
case $validp in
nil) echo >&2 "$quis: bad $ckwhat \`$thing'"; exit 1 ;;