v5.0 is a massive release. It brings along changes to syntax, new operators as well as new builtins, reserved variables and a new event
Murex tries to retain backwards compatibility wherever possible. However sometimes changes need to be made to keep the language, shell and general usability moving forwards. The following are a list of such changes:
[alpha, numeric, underscore]\(...\) will be parsed as a
function rather than a string. eg command foo(bar baz)
where foo will be treated as a subshell function with
bar baz as its parameters. Solution is simply to put
that parameter inside quotation marks instead of leaving it as a
bareword parameter% will be first parsed
as an expression. eg %(valid string) vs
(valid expression) which might cause unexpected results in
edge cases where a (string) is also a valid expression.
Please update (strings) to include %, eg
%(string)These are changes to Murex defaults, however you shouldn’t expect any breaking changes to Murex’s behaviour:
$ARGV now preferred instead of $ARGS
($ARGS will remain supported for now)command: parameters ... style syntax has been
deprecated in favour of the more traditional
command parameters ... (without a colon) syntax.Features marked as EXPERIMENTAL are provided without assurances of future breaking changes.
foobar = uptime() (issue 676)echo uptime() (issue 676)onSignalReceived for catching OS
signalssignal for sending OS signalswhich (issue 609)type (issue 609)cd defaults to ~ if now parameters are
passed (issue
672)cd - changes to previous directory (issue 672)$SELF.Interactive value to detect if scope is
running in an interactive shell (issue 685)$COLUMNS reserved variable to output width of
terminal$MUREX_ARGV reserved variable to output command line
parameters of Murex shell (not to be confused with the parameters of the
running function, eg $ARGV)format from a table (eg csv) to
json or yaml will now return a map instead of
an array of arrays (use jsonl (jsonlines) if you need to
retain a 2D array of data in JSON-like format)csv data type and select builtin now
support converting maps (eg JSON objects) into tables (issue 689)murex-doc / help can now display a
greater number of documents when offlinealias now stores FileRef metadata (issue 124)murex-package remove
(issue
687)murex-package newmurex-package:
git. Which allows you to run git commands
on a package even when you’re not in that package’s working
directoryup and down arrows on a
partial command line will cycle through history of only lines that
contain your partial command linectrl+z while
readline is open will undo the previous key strokes|| and && (issue 708):=, assigns a
value but retains the former data type, thus converting the value when
required (ideally I’d have preferred this as default option but it ran
the risk of some serious and unexpected breaking changes to the
behaviour of some existing shell scripts)$ sigils, eg foreach $var { ... }
works as well as foreach var { ... }$MOD, like
$GLOBAL but scoped to the module level<fid:VAR_NAME> and
<pid:VAR_NAME> respectivelygcc as well as go compilers. The reduced
cgo footprint has already reduced file sizes by a
3rdconfig functions (eg hint-text-func) now
execute with the FileRef of the setter. Meaning they can
call privates correctly$PWDHIST was corrupting upon first updategit-commit man page parsing, which
caused the parser to hang and ramp up CPU usage on git
autocompletionsFileRef either wasn’t being set,
wasn’t being set correctly, or was missing a timestamp (issue 696)printf dependency removed from aliases
function – this means aliases now works on Windows too|| and && now parse correctly in
expressionsSpecial thank yous for this release goes to the following contributors:
You rock!
Published: 07.09.2023 at 00:12
alias: Create an alias for a commandwhich: Locate command originevent: Event driven programming for shell scriptsmurex-package: Murex’s package managermurex-docs: Displays the man pages for Murex
builtinssignal: Sends a signal RPCconfig: Query or define Murex runtime settingsautocomplete: Set definitions for tab-completion in the
command lineARGV (json): Array
of the command name and parameters within a given scopeCOLUMNS (int):
Character width of terminalMUREX_ARGV
(json): Array of the command name and parameters passed to the
current shellSELF (json): Meta
information about the running scope.csv: CSV files (and other
character delimited tables)float (floating point
number): Floating point number (primitive)onSignalReceived:
Trap OS signalsThis document was generated from gen/changelog/v5.0_doc.yaml.
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 Sat Aug 23 22:28:13 UTC 2025 against commit ad23f13ad23f131bfecd82ea8a12d9b3e92aab5d8398ae9.
Current version is 7.0.2129 (website) which has been verified against tests cases.