Issue is not reproduced when using a variable as pattern, and it's not
related the space character in the pattern:
$ ./bash --norc
bash-5.2$ var="abcd efgh ijkl mnop qrst"
bash-5.2$ pattern=" "
bash-5.2$ string="_"
bash-5.2$ echo "${var//${pattern}/${string}[${string}}"
abcd_[_efgh_[_ijkl_[_mnop_[_qrst
bash-5.2$ echo "${var// /${string}[${string}}"
bash: bad substitution: no closing `}' in ${var// /${string}[${string}}
bash-5.2$ echo "${var//a/${string}[${string}}"
bash: bad substitution: no closing `}' in ${var//a/${string}[${string}}
On 06/10/2022 16:52, Antoine wrote:
Configuration Information [Automatically generated, do not change]:
Machine: x86_64
OS: linux-gnu
Compiler: gcc
Compilation CFLAGS: -g -O2
uname output: Linux z390 5.10.0-16-amd64 #1 SMP Debian 5.10.127-2
(2022-07-23) x86_64 GNU/Linux
Machine Type: x86_64-pc-linux-gnu
Bash Version: 5.2
Patch Level: 0
Release Status: release
Description:
Hello,
When using substitution with variables and opening bracket as string
"target", the bracket has to be escaped if there is no closing bracket
and only when a variable is already used in the string.
It wasn't the behavior or previous bash version.
Repeat-By:
$ ./bash --norc
bash-5.2$ var1="qwertyuiop asdfghjkl"
bash-5.2$ var2="_"
bash-5.2$ echo "${var1// /${var2}[${var2}}"
bash: bad substitution: no closing `}' in ${var1// /${var2}[${var2}}
# but the following work as expected (escaped bracket):
bash-5.2$ echo "${var1// /${var2}\[${var2}}"
qwertyuiop_[_asdfghjkl
# also working as expected (with closing bracket):
bash-5.2$ echo "${var1// /${var2}[${var2}]}"
qwertyuiop_[_]asdfghjkl
# also working as expected (no variable before the bracket):
bash-5.2$ echo "${var1// /[${var2}}"
qwertyuiop[_asdfghjkl
--
Antoine