The multisubstitute program
multisubstitute performs several substitutions at once in its argv, then executes another program.
Interface
In an execlineb script:
multisubstitute
{
[ define [ -N | -n ] [ -s ] [ -C | -c ] [ -d delim ] variable value ]
[ importas [ -i | -D default ] [ -N | -n ] [ -s ] [ -C | -c ] [ -d delim ] variable envvar ]
[ importas -S [ -i | -D default ] [ -N | -n ] [ -s ] [ -C | -c ] [ -d delim ] envvar ]
[ elglob [ -v ] [ -w ] [ -s ] [ -m ] [ -e ] [ -0 ] variable pattern ]
[ elgetpositionals [ -P sharp ] ]
[ multidefine value { variable... } ]
...
}
prog...
- multisubstitute reads a block containing a series of substitution commands. It performs all those substitutions on prog... in parallel. Check the relevant documentation page to learn about the syntax of each substitution command.
- multisubstitute then execs into the modified prog....
Options
- If an importas directive was given with the -i option, and the looked up variable is undefined, multisubstitute will exit 100.
- Like its direct program equivalent, importas has two modes: the normal one, which takes a variable and an envvar as argument and imports envvar under the name variable, and the -S one, which only takes one argument and imports an environment variable under the same name.
Rationale
Security
multisubstitute can be used to avoid unwanted serial substitutions. Consider the following script:
#!/command/execlineb
export A wrong
define B ${A}
importas A A
echo ${B}
Running it will print wrong, because A is substituted after B. On the contrary, the following script:
#!/command/execlineb
export A wrong
multisubstitute
{
define B ${A}
importas A A
}
echo ${B}
will print ${A}, because A and B are substituted at the same time. Serial substitution may be what you want - but when in doubt, always perform parallel substitution.
Efficiency
Substitution is a costly mechanism: the whole argv is read three times and rewritten twice. Serial substitution multiplies the cost by the number of substitutions, whereas parallel substitution pays the price only once.
Credits
Paul Jarc first originated the idea of the multisubstitute command and a possible syntax.
