This is an experimental Python library to enable POSIX parameter expansion in a string. It supports also a subset of Bash parameter expansion.
One reason is that it may be security risk. Another reason is to support lightweight analysis or evaluation of shell parameters with few system dependencies and outside of a running shell.
For instance this use in scancode-toolkit as part of a lightweight shell script parser to extract and expand parameters found in some build scripts.
All the standard shell expansions are supported, including some level of nested expansion, as long as this is not too complex or ambiguous. In addition, we support Bash substrings and string replacement. There is an extensive test suite listing all supported substitions
The expand()
function accepts a string and a dictionary of variables
(otherwise it uses the current environmnent variables). The string is
parsed with a custom parser and interpreted to perform the various
expansion procedures using these variables.
>>> from parameter_expansion import expand
>>> foo = 'abc/123-def.ghi'
>>> # Bland Expansion
>>> expand('abc $foo abc')
'abc abc/123-def.ghi abc'
>>> expand('abc${foo}abc')
'abcabc/123-def.ghiabc'
>>>
>>> # Default Value Expansion
>>> expand('-${foo:-bar}-')
'-abc/123-def.ghi-'
>>> expand('-${bar:-bar}-')
'-bar-'
>>> foo = 'abc/123-def.ghi'
>>> expand('abc $foo abc')
'abc abc/123-def.ghi abc'
>>> expand('abc${foo}abc')
'abcabc/123-def.ghiabc'
-
https://github.com/sayanarijit/expandvars has similar features yet does not cover all the expansions that this library supports (such as %, # and nested variables).