On Wed, Feb 15, 2023 at 05:35:10PM +0100, Mike Jonkmans wrote:
> I once had that same issue:
> https://lists.gnu.org/archive/html/bug-bash/2015-10/msg00013.html
> 
> Conclusion: the shopt is not yet working until the function has been run.
> (or after the line has been parsed).

Yes.  This is not a change in bash 5.2.  It would break in any version
of bash.

unicorn:~$ bash-2.05b -c 'x() { shopt -s extglob; echo *.pd@(f|qux); }'
bash-2.05b: -c: line 1: syntax error near unexpected token `('
bash-2.05b: -c: line 1: `x() { shopt -s extglob; echo *.pd@(f|qux); }'

The extglob shopt changes how bash parses commands as it reads them, so
it has to be in effect *before* bash reads a command which contains an
extended glob.

This means you can't turn it on in the middle of a compound command
(such as a function definition, a while loop, and if/then/fi, etc.).
You have to enable it before bash begins reading and parsing the compound
command.

I advise putting it as close to the top of the script as you can.

Reply via email to