On Fri, Nov 19, 2021 at 08:02:19AM +0100, Harald Dunkel wrote: > On 2021-11-18 17:52:29, Robert Elz wrote: > > Date: Thu, 18 Nov 2021 10:34:40 +0100 > > From: Harald Dunkel <harald.dun...@aixigo.com> > > Message-ID: <fff15881-9ee7-ce68-6d86-daa81a7d6...@aixigo.com> > > > > | at least due to unbalanced parenthesis? > > > > Greg's reply was correct, but he didn't explicitly address that point. > > In sh, characters like { } [ ] (but not ( and )) are just characters. > > In some scenarios they're required to be paired for things to work, but > > you can always simply use one (unquoted) anywhere there's a need. They > > don't have to balance in any way. > > > > "Some scenarios" is the point here. The parenthesis have to balance as > soon as it comes to shell parameter expansion, which is (or should have > been) the case here. Something like > > : ${SSLDIR:="${JM_WORK}/ssl" > > doesn't work, either. > > You have to admit that this was a mean pitfall.
You're expecting curly braces to have special meaning. They don't. Curly braces only have special meaning in three highly specific scenarios: 1) The { appears after a $ character. 2) An unquoted { } pair appears with an unquoted comma between them, triggering brace expansion. 3) { appears alone in the command position, indicating the start of a braced command group. In all other scenarios, { and } are simply ordinary characters with no special meaning. Number 2 is tricky. You can get unexpected results if you feed an ambiguous set of unbalanced curlies to the parser. I would not recommend using brace expansion in scripts. It's really intended only for interactive use, to save typing in relatively simple commands.