summaryrefslogtreecommitdiff
path: root/programs/zstdgrep
diff options
context:
space:
mode:
Diffstat (limited to 'programs/zstdgrep')
-rwxr-xr-xprograms/zstdgrep141
1 files changed, 74 insertions, 67 deletions
diff --git a/programs/zstdgrep b/programs/zstdgrep
index 9f871c03f1aa..a10e0710a296 100755
--- a/programs/zstdgrep
+++ b/programs/zstdgrep
@@ -31,94 +31,101 @@ grep_args=""
hyphen=0
silent=0
-prg=$(basename $0)
+prg=$(basename "$0")
# handle being called 'zegrep' or 'zfgrep'
-case ${prg} in
- *zegrep)
- grep_args="-E";;
- *zfgrep)
- grep_args="-F";;
+case "${prg}" in
+ *zegrep) grep_args="-E";;
+ *zfgrep) grep_args="-F";;
esac
# skip all options and pass them on to grep taking care of options
# with arguments, and if -e was supplied
-while [ $# -gt 0 -a ${endofopts} -eq 0 ]
-do
- case $1 in
+while [ "$#" -gt 0 ] && [ "${endofopts}" -eq 0 ]; do
+ case "$1" in
# from GNU grep-2.5.1 -- keep in sync!
- -[ABCDXdefm])
- if [ $# -lt 2 ]
- then
- echo "${prg}: missing argument for $1 flag" >&2
- exit 1
- fi
- case $1 in
- -e)
- pattern="$2"
- pattern_found=1
- shift 2
- break
- ;;
- *)
- ;;
- esac
- grep_args="${grep_args} $1 $2"
- shift 2
- ;;
- --)
- shift
- endofopts=1
- ;;
- -)
- hyphen=1
- shift
- ;;
- -h)
- silent=1
- shift
- ;;
- -*)
- grep_args="${grep_args} $1"
- shift
- ;;
- *)
- # pattern to grep for
- endofopts=1
- ;;
+ -[ABCDXdefm])
+ if [ "$#" -lt 2 ]; then
+ printf '%s: missing argument for %s flag\n' "${prg}" "$1" >&2
+ exit 1
+ fi
+ case "$1" in
+ -e)
+ pattern="$2"
+ pattern_found=1
+ shift 2
+ break
+ ;;
+ *)
+ ;;
+ esac
+ grep_args="${grep_args} $1 $2"
+ shift 2
+ ;;
+ --)
+ shift
+ endofopts=1
+ ;;
+ -)
+ hyphen=1
+ shift
+ ;;
+ -h)
+ silent=1
+ shift
+ ;;
+ -*)
+ grep_args="${grep_args} $1"
+ shift
+ ;;
+ *)
+ # pattern to grep for
+ endofopts=1
+ ;;
esac
done
# if no -e option was found, take next argument as grep-pattern
-if [ ${pattern_found} -lt 1 ]
-then
- if [ $# -ge 1 ]; then
- pattern="$1"
- shift
- elif [ ${hyphen} -gt 0 ]; then
- pattern="-"
+if [ "${pattern_found}" -lt 1 ]; then
+ if [ "$#" -ge 1 ]; then
+ pattern="$1"
+ shift
+ elif [ "${hyphen}" -gt 0 ]; then
+ pattern="-"
else
- echo "${prg}: missing pattern" >&2
- exit 1
+ printf '%s: missing pattern\n' "${prg}" >&2
+ exit 1
fi
fi
+EXIT_CODE=0
# call grep ...
-if [ $# -lt 1 ]
-then
+if [ "$#" -lt 1 ]; then
# ... on stdin
- ${zcat} -fq - | ${grep} ${grep_args} -- "${pattern}" -
+ set -f # Disable file name generation (globbing).
+ # shellcheck disable=SC2086
+ "${zcat}" -fq - | "${grep}" ${grep_args} -- "${pattern}" -
+ EXIT_CODE=$?
+ set +f
else
# ... on all files given on the command line
- if [ ${silent} -lt 1 -a $# -gt 1 ]; then
- grep_args="-H ${grep_args}"
+ if [ "${silent}" -lt 1 ] && [ "$#" -gt 1 ]; then
+ grep_args="-H ${grep_args}"
fi
- while [ $# -gt 0 ]
- do
- ${zcat} -fq -- "$1" | ${grep} --label="${1}" ${grep_args} -- "${pattern}" -
- shift
+ CUR_EXIT_CODE=0
+ EXIT_CODE=1
+ set -f
+ while [ "$#" -gt 0 ]; do
+ # shellcheck disable=SC2086
+ "${zcat}" -fq -- "$1" | "${grep}" --label="${1}" ${grep_args} -- "${pattern}" -
+ CUR_EXIT_CODE=$?
+ if [ "${CUR_EXIT_CODE}" -eq 0 ] && [ "${EXIT_CODE}" -ne 1 ]; then
+ EXIT_CODE=0
+ fi
+ shift
done
+ set +f
fi
-exit 0
+exit "${EXIT_CODE}"