murex Shell Docs

Parser Reference: Brace Quote (%(, )) Tokens

Initiates or terminates a string (variables expanded)


Brace quote is used to initiate and terminate strict strings where variables can be expanded.

While brace quotes are untraditional compared to your typical string quotations in POSIX shells, brace quotes have one advantage in that the open and close grapheme differ (ie ( is a different character to )). This brings benefits when nesting quotes as it saves the developer from having to carefully escape the nested quotation marks just the right number of times.

Commands cannot be quoted using brace quotes because %( is recognized as its own function.


As a parameter:

name = %(Bob)

As a function:

» %(hello world)
hello world

Nested quotes:

» murex -c %(out: %(Hello "${murex -c %(out: %(Bob))}"))
Hello "Bob"

In this example we are calling murex to execute code as a command line parameter (the -c flag). That code outputs Hello "..." but inside the double quotes is a name that is generated from a sub-shell. That sub-shell itself runs another murex instance which also executes another command line parameter, this time outputting the name Bob.

The example is contrived but it does demonstrate how you can heavily nest quotes and even mix and match that with other quotation marks if desired.

This is something that is extremely difficult to write in traditional shells because it would require lots of escaping, and even escaping the escape characters (and so on) the further deep you get in your nest.


Multi-Line Quotes

Quotes can also work over multiple lines

» out: %(foo
» bar)

Legacy Support

Version 3.x of murex introduced support for the % token, before that brace quotes worked without it. However to retain backwards compatibility, the older syntax is still supported…albeit officially classed as “deprecated” and may be removed from a future release.

Below is a little detail about how the legacy syntax worked:

Deprecated Syntax

The open brace character is only recognized as a brace quote token if it is the start of a parameter.

» set: example=(World!)
» out: (Hello $example)
Hello (World!)

See Also

This site's content is rebuilt automatically from murex's source code after each merge to the master branch. Downloadable murex binaries are also built with the website.

Last built on Mon Feb 13 09:18:06 UTC 2023 against commit f339958f33995895c1d997efcdbb8408d2c8d45f8b5f934.

Current version is which has been verified against 13950 tests cases.