On 5/27/18 7:38 PM, marcelpa...@gmail.com wrote: > Bash Version: 4.4 > Patch Level: 19 > Release Status: release > > Description: > extglob patterns are not expanded in -c command-strings, even if extglob is > set within the command-string. For instance, running: > > bash -c 'shopt -s extglob; echo @(foo*|bar*)' > > generates this error: > > bash: -c: line 0: syntax error near unexpected token `(' > bash: -c: line 0: `shopt -s extglob; echo @(foo*|bar*)'
Of course. This is how the shell should behave. Bash always reads at least one complete line of input before parsing and executing any of the commands on that line. If you apply that rule, you can figure out the answer: extglob changes the behavior of the parser, so it must be enabled before a command is parsed. The complete line of input is read before any of it is parsed, and the complete line is parsed before any of it is executed. As a consequence, the extglob option must be enabled for the ( to be recognized as an extended globbing pattern instead of an operator. -- ``The lyf so short, the craft so long to lerne.'' - Chaucer ``Ars longa, vita brevis'' - Hippocrates Chet Ramey, UTech, CWRU c...@case.edu http://tiswww.cwru.edu/~chet/