From 097c7b67ce86ff16a7cef7631b39e5ca4ee3d420 Mon Sep 17 00:00:00 2001 From: Lasse Collin Date: Fri, 16 Sep 2022 14:07:03 +0300 Subject: [PATCH] xzgrep: Fix compatibility with old shells. Running the current xzgrep on Slackware 10.1 with GNU bash 3.00.15: xzgrep: line 231: syntax error near unexpected token `;;' On SCO OpenServer 5.0.7 with Korn Shell 93r: syntax error at line 231 : `;;' unexpected Turns out that some old shells don't like apostrophes (') inside command substitutions. For example, the following fails: x=$(echo foo # asdf'zxcv echo bar) printf '%s\n' "$x" The problem was introduced by commits 69d1b3fc29677af8ade8dc15dba83f0589cb63d6 (2022-03-29), bd7b290f3fe4faeceb7d3497ed9bf2e6ed5e7dc5 (2022-07-18), and a648978b20495b7aa4a8b029c5a810b5ad9d08ff (2022-07-19). 5.2.6 is the only stable release that included this problem. Thanks to Kevin R. Bulgrien for reporting the problem on SCO OpenServer 5.0.7 and for providing the fix. --- src/scripts/xzgrep.in | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/scripts/xzgrep.in b/src/scripts/xzgrep.in index c5b89430..449f0e61 100644 --- a/src/scripts/xzgrep.in +++ b/src/scripts/xzgrep.in @@ -209,7 +209,7 @@ for i; do # which prints "binary file matches" to stderr instead of stdout. # # If reading from stdin, let grep use whatever name it prefers for - # stdin. With GNU grep it's a locale-specific translated string. + # stdin. With GNU grep it is a locale-specific translated string. if test "x$i" = "x-"; then eval "$grep -H" else @@ -226,12 +226,12 @@ for i; do (*' '* | *'&'* | *'\'* | *'|'*) # If sed fails, set i to a known safe string to ensure that - # failing sed didn't create a half-escaped dangerous string. + # failing sed did not create a half-escaped dangerous string. i=$(printf '%s\n' "$i" | LC_ALL=C sed 's/[&\|]/\\&/g; $!s/$/\\/') || i='(unknown filename):';; esac - # $i already ends with a colon so don't add it here. + # $i already ends with a colon so do not add it here. sed_script="s|^|$i|" # If grep or sed fails, pick the larger value of the two exit statuses.