Index: usr.bin/grep/zgrep.sh =================================================================== --- usr.bin/grep/zgrep.sh +++ usr.bin/grep/zgrep.sh @@ -25,6 +25,15 @@ # $FreeBSD$ set -u + +quote() { + local part IFS=\'; set -- $1"" + unset quote_result + for part do + quote_result=${quote_result+$quote_result\'\\\'\'}$part + done +} + grep=grep zcat=zstdcat @@ -82,16 +91,13 @@ exit 1 fi case $1 in - -e) - pattern="$2" + -[ef]) + pattern="" pattern_found=1 - shift 2 - break ;; - *) - ;; esac - grep_args="${grep_args} $1 $2" + quote "$2" + grep_args="${grep_args} $1 '${quote_result}'" shift 2 ;; --) @@ -128,7 +134,7 @@ if [ ${pattern_found} -lt 1 ] then if [ $# -ge 1 ]; then - pattern="$1" + pattern="\"$1\"" shift elif [ ${hyphen} -gt 0 ]; then pattern="-" @@ -142,14 +148,14 @@ if [ $# -lt 1 ] then # ... on stdin - ${cattool} ${catargs} - | ${grep} ${grep_args} -- "${pattern}" - + eval "${cattool} ${catargs} - | ${grep} ${grep_args} -- ${pattern} -" else # ... on all files given on the command line if [ ${silent} -lt 1 -a $# -gt 1 ]; then grep_args="-H ${grep_args}" fi for file; do - ${cattool} ${catargs} -- "${file}" | ${grep} --label="${file}" ${grep_args} -- "${pattern}" - + eval "${cattool} ${catargs} -- \"${file}\" | ${grep} --label=\"${file}\" ${grep_args} -- ${pattern} -" done fi