Configuration Information [Automatically generated, do not change]:
Machine: aarch64
OS: linux-gnu
Compiler: gcc
Compilation CFLAGS: -g -O2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer>
uname output: Linux aelata-vbox 6.8.0-88-generic #89-Ubuntu SMP PREEMPT_DYNAMIC>
Machine Type: aarch64-unknown-linux-gnu

Bash Version: 5.2
Patch Level: 21
Release Status: release

Description:
When BASH_COMPAT=3.2 is set on bash 5.2, quoting '&' in pattern substitution is 
not compatible with bash 3.2.

The following line is expected wth the script below.

BASH_VERSION=5.2.21(1)-release, BASH_COMPAT=3.2, a < b

Repeat-By:

#!/bin/bash

s="a < b"
vers=(3.2 4.4 5.1 5.2)
for ver in "${vers[@]}"; do
  [[ $BASH_VERSION < $ver ]] && break
  BASH_COMPAT=$ver # ignored for bash version less than 5.0
  t=${s//'<'/'&lt;'}
  echo "BASH_VERSION=$BASH_VERSION, BASH_COMPAT=$BASH_COMPAT, $t"
done

--

BASH_VERSION=3.2.57(1)-release, BASH_COMPAT=3.2, a &lt; b

BASH_VERSION=4.4.18(1)-release, BASH_COMPAT=3.2, a &lt; b
BASH_VERSION=4.4.18(1)-release, BASH_COMPAT=4.4, a &lt; b

BASH_VERSION=5.1.16(1)-release, BASH_COMPAT=3.2, a &lt; b
BASH_VERSION=5.1.16(1)-release, BASH_COMPAT=4.4, a &lt; b
BASH_VERSION=5.1.16(1)-release, BASH_COMPAT=5.1, a &lt; b

BASH_VERSION=5.2.21(1)-release, BASH_COMPAT=3.2, a <lt; b
BASH_VERSION=5.2.21(1)-release, BASH_COMPAT=4.4, a &lt; b
BASH_VERSION=5.2.21(1)-release, BASH_COMPAT=5.1, a &lt; b
BASH_VERSION=5.2.21(1)-release, BASH_COMPAT=5.2, a &lt; b

—


Reply via email to