Configuration Information [Automatically generated, do not change]: Machine: x86_64 OS: linux-gnu Compiler: gcc Compilation CFLAGS: -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wall uname output: Linux erdos 5.18.0-4-amd64 #1 SMP PREEMPT_DYNAMIC Debian 5.18.16-1 (2022-08-10) x86_64 GNU/Linux Machine Type: x86_64-pc-linux-gnu
Bash Version: 5.1 Patch Level: 16 Release Status: release Description: According to the bash manpage, the test builtin should accept parentheses: ( expr ) Returns the value of expr. This may be used to override the normal precedence of operators. But the following small script, saved as/tmp/testtest.sh: ----- #!/bin/bash if [ ("$1" = "yes" -o "$1" = "YES") -a ("$2" = "red" -o "$2" = "RED") ] then echo "Yes, it's red" else echo "No, it's not red" fi ----- fails when called: $ /tmp/testtest.sh yes red tmp/testtest.sh: line 3: syntax error near unexpected token `"$1"' /tmp/testtest.sh: line 3: `if [ ("$1" = "yes" -o "$1" = "YES") -a ("$2" = "red" -o "$2" = "RED") ]' Upgrading to bash 5.2.0(1)-rc2 did not help, neither did using \( instead of (, and neither did putting spaces around the parentheses. I have also checked (using strace) that it was using the builtin [ rather than /usr/bin/[. Best wishes, Julian